以下是代码:
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;
}
}
我的代码出了什么问题?我知道这是一个非常简单的算法,但却无法弄清楚问题出在哪里。
请提前帮助我。
答案 0 :(得分:5)
我猜你的partition
函数有一个错误。您选择的顶点(轴)v
应该每次都设置为a[lo]
而不是a[0]
。
然后设置i = lo + 1
和j = hi