Niepoprawnie działający quicksort

0

Własnie sobie piszę różne elementarne algorytmy i mam problem przy quicksorcie. Cholera siedze nad tym 15 minut i nie widzę błędu.

Mógłby go ktoś wskazać? Jeżeli macie jakieś dodatkowe uwagi co do implementacji to również byłbym wdzięczny.

void quick_sort(int tablica[],int l,int p)
{
int lk = l;
int pk = p;
int sr = (l+p)/2;
int tmp;

while(lk<=pk){
while(tablica[lk]<tablica[sr]){lk++;}
while(tablica[pk]>tablica[sr]){pk--;}
if(lk<=pk){tmp = tablica[lk];tablica[lk] = tablica[pk];tablica[pk]=tmp;lk++;pk--;}

}

if(l<pk){quick_sort(tablica,l,pk);}
if(lk<p){quick_sort(tablica,lk,p);}
}
0

Ok tam to jest zrobione trochę bardziej elegancko i mógłbym przerobić swój kod na taki jak tam ale to wciąż mi nie mówi co w moim kodzie mam zle.

edit : Ok mam już błąd wybacz za głupią odpowiedz , dopiero jak przeczytałem zobaczyłem jak zabrzmiała.

0
  1. Sensowne wcięcia
  2. Sensowne nazwy zmiennych
  3. Piwot powinien być elementem tablicy, a nie jego indeksem. Wyobraź sobie sytuację:
    1 2 3 4 5 1 2 1 6
    sr = 4, początkowy piwot = 5
    lk dojdzie do indeksu 4, pk dojdzie do indeksu 7, robisz zamianę
    1 2 3 4 1 1 2 5 6
    sr nadal = 4, piwot = 1

1 użytkowników online, w tym zalogowanych: 0, gości: 1