【发布时间】:2019-09-24 19:02:37
【问题描述】:
所以我测试了这段代码,如果枢轴是数组的最后一个元素,它可以工作,但是如果我尝试在枢轴是随机元素的情况下运行它,结果数组不包含原始数组的某些元素
public static void quickSort(int[] S){
int n = S.length;
if(n<2)
return;
int random = (int)(Math.random() * n);
int pivot = S[random];
int m = 0, k = n;
int[] temp = new int[n];
for(int i = 0; i < n-1; i++){
if(S[i] < pivot)
temp[m++] = S[i];
else if(S[i] > pivot)
temp[--k] = S[i];
}
int[] L = Arrays.copyOfRange(temp,0,m);
int[] E = new int[k-m];
Arrays.fill(E,pivot);
int[] G = Arrays.copyOfRange(temp,k,n);
quickSort(L);
quickSort(G);
System.arraycopy(L,0,S,0,m);
System.arraycopy(E,0,S,m,k-m);
System.arraycopy(G,0,S,k,n-k);
}
此代码输出 1 1 2 2 2 43
【问题讨论】:
-
附带说明,使用不言自明的变量名作为良好的编程习惯。
-
你没有。您将随机 element 作为枢轴。数据中必须存在枢轴值。
标签: java sorting random quicksort