Ceci est tout mon code pour ma méthode quicksort, cela fonctionne sur un ensemble de 21 nombres, mais pas sur mon jeu de données réel, qui est d'environ 100000. Je n'ai aucune idée de ce qui ne va pas, j'ai été bidouillant pendant deux heures et il est dû bientôt! Toute aide serait la bienvenueQuicksort ne fonctionne pas
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];
}
Ce n'est pas vraiment un endroit pour résoudre des questions de devoirs; en particulier ceux qui sont presque dus. Peut-être que vous devriez demander à un camarade de classe ou regarder quelques-uns des tutoriels qsort en ligne. –
Si vous regardez le code, vous remarquerez qu'il est complet, donc personne ne «résout» mon problème de devoirs. J'ai fait presque tout ça, il y a juste un petit pépin là-dedans que je n'arrive pas à trouver alors j'espérais que quelqu'un jetterait un coup d'œil et verrait s'ils peuvent le trouver. Est-ce faux? – Tanner
En fait, je prends ce que j'ai dit; alors que la médiane de 5 insert sort était/est toujours fausse, que c'était un problème de partitionnement n'est ce pas (j'ai perdu de vue des morceaux de code); lexu est juste cependant. – CoderTao