Próbuję zaimplementować algorytm QuickSort na podstawie książki Cormena. Poniższy kod działa dla tablic, w których dana liczba nie występuje więcej niż jeden raz, w przeciwnym wypadku się zapętla.
long long quickSort_podziel(long long *danaTab, long long n, long long p, long long r)
{
long long x, i, j, tmp;
x = danaTab[p];
i = p; // różnica w stosunku do pseudokodu
j = r; // różnica w stosunku do pseudokodu
while (1)
{
while (danaTab[j] > x)
{
j--;
}
while (danaTab[i] < x)
{
i++;
}
if (i < j)
{
tmp = danaTab[i];
danaTab[i] = danaTab[j];
danaTab[j] = tmp;
}
else
{
return j;
}
}
}
void quickSort(long long *danaTab, long long n, long long p, long long r)
{
long long q;
if (p < r)
{
q = quickSort_podziel(danaTab, n, p, r);
quickSort(danaTab, n, p, q);
quickSort(danaTab, n, q + 1, r);
}
}
Tak wygląda pseudokod, na którym się wzorowałem:
http://www.fotosik.pl/showFullSize.php?id=9c92dff1dfb5ae29
Autor sortuje tablicę indeksowaną od 1, a w C jak wiadomo indeksuje się od 0. Dałem j = p zamiast j = p - 1 oraz i = r zamiast i = r + 1, gdyż za chwilę odwoływałbym się do elementu tablicy o indeksie -1. Nie mam już pomysłu co zmienić, żeby algorytm działał dla dowolonych danych... Pomoże ktoś?