我想實現quickSort使用插入排序爲短於一定長度的子數組。我已經寫了這段代碼,但問題是它可以用於多達400,000個整數的記錄,但我需要使它運行5000,000個整數數組。它給我很難找到爲什麼我得到這個StackOverflow錯誤。QuickSort修改實現使用插入排序的短子陣列
public int[] quickSort2(int[] arrayOfIntegers, int startIndex, int endIndex) {
if (startIndex < endIndex) {
if (endIndex - startIndex < INSERTION_SORT_THRESHOLD) {
InsertionSort(arrayOfIntegers, startIndex, endIndex);
} else {
int pivotIndex = partition2(arrayOfIntegers, startIndex, endIndex);
quickSort2(arrayOfIntegers, startIndex, pivotIndex - 1);
quickSort2(arrayOfIntegers, pivotIndex + 1, endIndex);
}
}
return arrayOfIntegers;
}
插入排序看起來像這樣:
public int[] InsertionSort(int[] arrayOfNumbers, int startIndex, int endIndex) {
for (int i = startIndex + 1; i <= endIndex; i++) {
int key = arrayOfNumbers[i];
int pointer = i - 1;
while (pointer >= startIndex && arrayOfNumbers[pointer] > key) {
arrayOfNumbers[pointer + 1] = arrayOfNumbers[pointer];
pointer -= 1;
}
arrayOfNumbers[pointer + 1] = key;
}
return arrayOfNumbers;
}
快速排序分區是:
private int partition2(int[] arrayOfIntegers, int start, int end) {
int pivot = arrayOfIntegers[end];
int pointer = start - 1;
for (int i = start; i <= end - 1; i++) {
if (arrayOfIntegers[i] <= pivot) {
pointer += 1;
int temporaryStorage = arrayOfIntegers[i];
arrayOfIntegers[i] = arrayOfIntegers[pointer];
arrayOfIntegers[pointer] = temporaryStorage;
}
}
arrayOfIntegers[end] = arrayOfIntegers[pointer + 1];
arrayOfIntegers[pointer + 1] = pivot;
return (pointer + 1);
}
此外,當I CODE對尺寸5000,000整數數組並使用的子陣列運行快速排序長度3,6,9等排序整個數組,它不會給我「StackOverflow」錯誤。 有人可以請幫忙
這是什麼意思? - '「使用長度爲3,6,9」的子陣列。使用這些尺寸在哪裏? – Dukeling
非常重複 - [爲什麼這種快速排序導致堆棧溢出幾乎排序列表和排序列表?](http://stackoverflow.com/a/20255628) – Dukeling