Это все мой код для моего метода quicksort, он работает с набором из 21 номера, но не на моем реальном наборе данных, который составляет около 100000. Я не знаю, что случилось, я был возиться в течение двух часов, и это должно скоро! Любая помощь будет очень приветствуютсяQuicksort не работает
public static void hybridQuicksort(int[] a, int start, int end)
{
final int MIN = 13;
if (end - start >= MIN)
{
int pivot = findPivot(a, start, end);
pivot = partition (a, start, end, pivot);
hybridQuicksort(a, start, pivot - 1);
hybridQuicksort(a, pivot + 1, end);
}
else
{
insertionSort(a, start, end);
}
}
//partitions the array based on the pivot
public static int partition(int[] a, int start, int end, int pivot)
{
int up = start + 1;
int down = end;
while (up <= down)
{
while (a[up] <= pivot)
up++;
while (a[down] > pivot)
down--;
if (up <= down)
swap(a, up, down);
}
swap(a, start, down);
return up;
}
//finds the first, middle, middle of first and middle, middle of middle and last
//and last numbers and sets their median as the pivot
public static int findPivot(int[] a, int start, int end)
{
//swap the 4 numbers to the start of the array, leaving the first as is
swap(a, start + 1, end - 1);
swap(a, start + 2, (start + end)/2);
swap(a, start + 3, end/4);
swap(a, start + 4, (end/2) + (end/4));
//sort the 5 numbers
insertionSort(a, 0, 5);
//swap the median to the front, that's the pivot
swap(a, start, start + 2);
//return the pivot
return a[start];
}
Это не место для решения домашних заданий; особенно те из них, которые почти ожидаются. Возможно, вам следует попросить классного помощника или просмотреть некоторые из обучающих программ qsort в Интернете. –
Если вы посмотрите на код, вы заметите, что он завершен, поэтому никто не «решает» мою домашнюю проблему. Я сделал почти все это, есть только какой-то глюк, который я не могу найти, поэтому я надеялся, что кто-то взглянет и увидит, смогут ли они его найти. Это неправильно? – Tanner
На самом деле, я беру то, что я сказал назад; в то время как медиана 5 сортировки вставки была/по-прежнему неправа, что проблема с разделением не была (я потерял из виду биты кода); lexu прав, хотя. – CoderTao