我運行Quicksort 10次,並獲得平均平均時間。 我對Qicksort/Insertion排序組合做同樣的事情,它似乎比只是快速排序慢。Quicksort/Insertion組合比Quicksort慢嗎?
這裏就是我所說的插入排序
public static <T extends Comparable<? super T>> void OptQSort2 (T[] data, int min, int max) {
int indexofpartition;
if(max - min > 0) {
if((max - min) <= 10) {
// Use InsertionSort now
InsertionSort.sort(data);
return;
} else {
indexofpartition = findPartition(data, min, max);
OptQSort2(data, min, indexofpartition - 1);
OptQSort2(data, indexofpartition + 1, max);
}
}
}
和經常快速排序僅僅是同上面的代碼中的部分代碼,但沒有調用插入排序的,如果條件。
FindPartition如下:
public static <T extends Comparable<? super T>> int findPartition(T[] data, int min, int max) {
int left, right;
T temp, partitionelement;
int middle = (min + max)/2;
partitionelement = data[middle];
left = min;
right = max;
while(left < right) {
while(data[left].compareTo(partitionelement) <= 0 && left < right)
left++;
while(data[right].compareTo(partitionelement) > 0)
right--;
if(left < right) {
temp = data[left];
data[left] = data[right];
data[right] = temp;
}
}
的平均時間只是快速排序和OptSort2(使用插入排序)是
Sorted using QuickSort in: 3858841
Sorted using OptQSort2 in: 34359610
任何想法,爲什麼?序列的大小是否重要?我爲此使用了一個1000個元素的Integer []數組。
「InsertionSort.sort()」實現了遞歸還是勢在必行? –
沒有看到QucikSort和InsertionSort的實現,這是不可能告訴的。 –
這是一個巨大的和意想不到的差距。 「InsertionSort.sort」究竟做了什麼? –