为什么我在Java中实现的快速排序不起作用?

时间:2015-12-01 07:00:09

标签: java algorithm sorting quicksort

以下是代码:

public class QuickSort {

    public static void sort(int[] a) {
        sort(a, 0, a.length-1);
    }

    private static void sort(int[] a, int lo, int hi) {
        if(hi <= lo) return;
        int j = partition(a, lo, hi);
        sort(a, lo, j-1);
        sort(a, j+1, hi);
    }

    private static int partition(int[] a, int lo, int hi) {
        int v = a[0];
        int i = lo, j = hi+1;
        while(true) {
            while(a[++i] < v) {
                if(i == hi) {
                    break;
                }
            }
            while(a[--j] > v) {
                if(j == lo) {
                    break;
                }
            }
            if(i >= j) {
                break;
            } else {
                exch(a, i, j);
            }
        }
        exch(a, lo, j);    // <- exchange the value of a[lo] and a[j]
        return j;
    }
}

我的代码出了什么问题?我知道这是一个非常简单的算法,但却无法弄清楚问题出在哪里。

请提前帮助我。

1 个答案:

答案 0 :(得分:5)

我猜你的partition函数有一个错误。您选择的顶点(轴)v应该每次都设置为a[lo]而不是a[0]

然后设置i = lo + 1j = hi