void RandomQuickSort(int *numberArray, int low, int high) { if (low >= high) //如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了 { return ; } int breakPoint = RandomPartition(numberArray,low,high); NormalQuickSort(numberArray, low, breakPoint - 1); NormalQuickSort(numberArray, breakPoint + 1, high); }
void QuickSort(int *pnArr, int nLeft, int nRight) { if (nLeft < nRight) { if (nRight - nLeft > K) { int nTmpPos = RandomPartition(pnArr, nLeft, nRight); QuickSort(pnArr, nLeft, nTmpPos - 1); QuickSort(pnArr, nTmpPos + 1, nRight); } else { InsertSort(pnArr, nLeft, nRight); } } }
wgttype RandomSelect(wgttype *a, int start, int end, int i) { int q,k,j; if (start==end) return a[start]; q=RandomPartition(a,start,end); // printf("After rand partition, q:%d, end:%d\n",q,end); /* for(j=start;j<=end;j++) printf("%f,",a[j]); printf("\n"); abort(); */ k=q-start+1; if (k==i) return a[q]; if (i < k ) return RandomSelect(a,start,q-1,i); else return RandomSelect(a,q+1,end,i-k); }