我正在使用Java实现quicksort,具有以下要求:
使用递归(在快速排序实现中)直到大小为k或更小的分区的停止情况。对于这些分区,请使用插入排序来完成。
我对如何实现这个甚至是它所要求的内容感到困惑。这是我对普通快速排序的看法。我怎么能修改它以满足要求?
public static void quick_srt(int array[],int low, int n){
int lo = low;
int hi = n;
if (lo >= n) {
return;
}
int mid = array[(lo + hi) / 2];
while (lo < hi) {
while (lo<hi && array[lo] < mid) {
lo++;
}
while (lo<hi && array[hi] > mid) {
hi--;
}
if (lo < hi) {
int T = array[lo];
array[lo] = array[hi];
array[hi] = T;
}
}
if (hi < lo) {
int T = hi;
hi = lo;
lo = T;
}
quick_srt(array, low, lo);
quick_srt(array, lo == low ? lo+1 : lo, n);
}
答案 0 :(得分:3)
分区大小为hi - lo
。所以你可以添加像
int k = 7;
// ...
if (hi - lo < k) {
insertion_srt(array, lo, hi);
return;
}
在int mid
之前。实施insertion_srt(int[], int, int)
作为读者的练习。