将给定值向右移大数字,向左移小数字

时间:2019-04-05 01:57:38

标签: java

我有一个家庭作业问题,给我这个数组:

[3,22,1,5,5,6,10,4]

我需要将所有大于最后一个值4的数字移至该值的右侧,并将所有小于该值的数值移至左侧。

数字不一定必须按顺序排列。因此,该程序的输出为:

[3,1,4,22,5,6,10]

出于某种原因,我真的很努力地想出一种允许这种情况发生的算法。我尝试过创建一个循环,该循环用较大的数字交换最后一个值,但是如果在数组中某个位置混合了一个最小值,则该奇数将位于不正确值的右侧。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

我不会帮助您完成家庭作业。但是,我将指导您思考您的这个例子的去向。这是快速排序的第一步-对数组进行分区。

public class QuickSortImpl {

    private static void swap(int[] array, int l, int h) {
        int temp = array[h];
        array[h] = array[l];
        array[l] = temp;
    }

    public static int partition(int[] array, int low, int high) {
        int pivot = high;
        int firsthigh = low;
        int x,y;

        for (int i = low; i < high; i++) {
            x = array[i];
            y = array[pivot];
            if (array[i] < array[pivot]) {
                swap(array, i, firsthigh);
                firsthigh++;
            }
        }
        swap(array, pivot, firsthigh);
        return firsthigh;
    }

    private static void printArray(int[] arr ) {
        for ( int i =0; i < arr.length; i++ ) {
            System.out.print(" " + arr[i]);
        }
        System.out.println();
    }

    public static void quickSort(int[] array, int low, int high) {
        if ( low < high ) {
            int pivot = partition(array, low, high);
            quickSort(array, low, pivot - 1);
            quickSort(array, pivot + 1, high); 
        }
    }

    public static void main(String[] args) {
        int[] arr = { 3, 22, 1, 5, 6, 10, 4};
        quickSort(arr, 0, arr.length -1 );
        printArray(arr);
    }
}

答案 1 :(得分:0)

@brent_mb,请看以下简单示例来说明您的原因:

public static void main(String[] args) {
        Integer[] listOfNumbers = {1,4,5,6,74,2,7,8,5,2,6,989,3};
        //sort by number 6
        FirstCustomComparator comparator = new FirstCustomComparator(6);

        Arrays.sort(listOfNumbers, 0, listOfNumbers.length, comparator);

        for (int number : listOfNumbers) {
            System.out.print(number+" ");
        }
    }
  

FirstCustomComparator类:

public class FirstCustomComparator implements Comparator<Integer> {

    private final int exception;

    public FirstCustomComparator(int i)
    {
        exception = i;
    }

    @Override
    public int compare(Integer a, Integer b)
    {
        if (a < exception)
        {
                return -1;

        }
        return a.compareTo(b);
    }
}