快速排序 Java 方法

Quicksort Java method

我对这种方法的输出有疑问:

static void quickSort(int[] ar) {

    ArrayList<Integer> left = new ArrayList<Integer>();
    ArrayList<Integer> equal = new ArrayList<Integer>();
    ArrayList<Integer> right = new ArrayList<Integer>();
    int num = ar[0];
    for (int i = 0; i < ar.length; i++) {
        if (ar[i] < num) {
            left.add(ar[i]);
        } else if (ar[i] > num) {
            right.add(ar[i]);
        } else {
            equal.add(ar[i]);
        }
    }
    int[] l = listToArray(left);
    int[] e = listToArray(equal);
    int[] r = listToArray(right);
    ArrayList<Integer> combined = new ArrayList<Integer>();
    combined.addAll(left);
    combined.addAll(equal);
    combined.addAll(right);
    int[] c = listToArray(combined);

    if (l.length > 1) {
        quickSort(l);
    }

    if (r.length > 1) {
        quickSort(r);
    }
    printArray(c);
} 

输入(标准输入)

7

5 8 1 3 7 9 2

你的输出(标准输出)

2 3

1 3 2

7 8 9

1 3 2 5 8 7 9

预期输出

2 3

1 2 3

7 8 9

1 2 3 5 7 8 9

有些地方出了问题。 1) 对于快速排序,您必须先左右排序,然后再将它们组合回组合数组。

2) combined.addAll() 未按预期运行。当我有 {2,3} 时,它以相反的顺序附加它们。在这里,我已经将手册中的值传递给循环。

3) 对于快速排序到 return 其值,必须将它们重新填充回原始参数或作为值 returned。我在原来的参数里填好了。

static void quickSort(Integer[] ar) {

    ArrayList<Integer> left = new ArrayList<Integer>();
    ArrayList<Integer> equal = new ArrayList<Integer>();
    ArrayList<Integer> right = new ArrayList<Integer>();
    int num = ar[0];
    for (int i = 0; i < ar.length; i++) {
        if (ar[i] < num) {
            left.add(ar[i]);
        } else if (ar[i] > num) {
            right.add(ar[i]);
        } else {
            equal.add(ar[i]);
        }
    }
    Integer[] l = new Integer[0];
    l = left.toArray(l);
    Integer[] e = new Integer[0];
    e = equal.toArray(e);
    Integer[] r = new Integer[0];
    r = right.toArray(r);
    if (l.length > 1) {
        quickSort(l);
    }

    if (r.length > 1) {
        quickSort(r);
    }
    ArrayList<Integer> combined = new ArrayList<Integer>();
    for(int ai = 0; ai < l.length; ai++)
    {
        combined.add(l[ai]);
    }
    for(int ai = 0; ai < e.length; ai++)
    {
        combined.add(e[ai]);
    }
    for(int ai = 0; ai < r.length; ai++)
    {
        combined.add(r[ai]);
    }
    combined.toArray(ar);
    //printArray(ar);
    System.out.println(combined);
}