Я пытаюсь реализовать quickSort, который использует сортировку Insertion для подмассивов, которые короче определенной длины. Я написал этот код, но проблема в том, что он работает для записей до 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;
}
QuickSort раздел:
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);
}
Кроме того, когда я код для запуска QuickSort на массив размера 5000.000 целых чисел и с помощью подмассива из длина 3, 6, 9 и т. д., чтобы отсортировать весь массив, это не дает мне ошибку «StackOverflow». Может кто-нибудь помочь
Что это значит? - '", используя подмассивы длиной 3, 6, 9 ". Используя эти размеры где? – Dukeling
Довольно много дубликатов - [Почему этот быстрый сортировка вызывает переполнение стека по почти отсортированным спискам и отсортированным спискам?] (Http://stackoverflow.com/a/20255628) – Dukeling