Java语言怎么先在输入一个数组然后,再在其中寻找所有比中位数小的数字放在前面,比中位数大的数字放在后面

Java语言怎么先在输入一个数组然后,再在其中寻找所有比中位数小的数字放在前面,比中位数大的数字放在后面,不能用排序的方法,怎么实现比较好?不容易出错的呢

参考:https://blog.csdn.net/jeddzd/article/details/88668699

可以先找到中位数,然后将数组分为两个部分,一个部分是比中位数小的数字,另一个部分是比中位数大的数字。然后,将这两个部分重新组合,比中位数小的数字放在前面,比中位数大的数字放在后面。以下是一种实现方式:

import java.util.Scanner;  
   public class Main {  
    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  
        int[] nums = new int[10];  
        int n = nums.length;  
        for (int i = 0; i < n; i++) {  
            nums[i] = scanner.nextInt();  
        }  
        int median = findMedian(nums);  
        int[] small = new int[n / 2];  
        int[] large = new int[n - n / 2];  
        for (int i = 0; i < n; i++) {  
            if (nums[i] < median) {  
                small[small.length - i / 2 - 1] = nums[i];  
            } else {  
                large[large.length - i / 2] = nums[i];  
            }  
        }  
        for (int i = 0; i < n / 2; i++) {  
            nums[i] = small[i];  
        }  
        for (int i = n / 2; i < n; i++) {  
            nums[i] = large[i - n / 2];  
        }  
        for (int i = 0; i < n; i++) {  
            System.out.print(nums[i] + " ");  
        }  
    }  
       private static int findMedian(int[] nums) {  
        int n = nums.length;  
        int left = 0;  
        int right = n - 1;  
        while (left <= right) {  
            int mid = (left + right) / 2;  
            if (mid % 2 == 0) {  
                if (nums[mid] > nums[mid + 1]) {  
                    left = mid + 2;  
                } else {  
                    right = mid - 1;  
                }  
            } else {  
                if (nums[mid] > nums[mid - 1]) {  
                    left = mid + 1;  
                } else {  
                    right = mid - 1;  
                }  
            }  
        }  
        return nums[left / 2];  
    }  
}

首先,通过 Scanner 类从标准输入中读取数组。然后,使用 findMedian 方法找到中位数。接下来,创建两个新的数组,一个用来存放比中位数小的数字,另一个用来存放比中位数大的数字。遍历原始数组,将数字分别放入这两个数组中。最后,将这两个数组重新组合,比中位数小的数字放在前面,比中位数大的数字放在后面。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^