特别是,从快速排序切换到插入排序的合适阈值是多少?
import java.util.Arrays;
/**
* A class for sorting array elements using quicksort algorithms
*/
public class QuicksortFixedPivotInsertion implements IntSorter{
InsertionSort insert = new InsertionSort();
public int partition(int [] array, int first, int last){
int middle = (first+last)/2;
swap(array, middle, last);
int pivot = array[last];
int i = first - 1;
for (int j = first; j < last; j++){
if (array[j]<pivot){
i++;
swap(array, i, j);
}
}
swap(array, i+1, last);
return i+1;
}
private void quickSort(int [] array, int first, int last){
if (array.length < 20){
insert.sort(array);
}
else if (first < last){
int pivot = partition(array, first, last);
quickSort(array, first, pivot - 1);
quickSort(array, pivot + 1, last);
}
}
public void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
/**
* sorts the array in ascending order
* @param v the array to be sorted
*/
@Override
public void sort(int [] v){
quickSort(v, 0, v.length - 1);
}
}
正如您所看到的,我已经自己实现了该算法,但我想确保它看起来正确,因为我不确定它是否应该看起来像那样。我不确定的原因是因为我用谷歌搜索,发现当您应该从快速排序切换到插入时的值大约为 20-30。同样在我们在课堂上讨论的讨论中,但与没有插入相比,我并没有真正看到我自己的实现有所改进。
我做错了什么?