Szybki algorytm podziału sortowania
void partition(int *a, int size) {
int pivot = a[0];
int left = 0, right = 0;
for(left = 1, right = size-1; left <= right; left++, right--) {
if(a[left] >= pivot && a[right] <= pivot){
swap(left, right, a);
}
}
swap(0, right, a);
}
Napisałem tę metodę, aby podzielić tablicę jako wstępny krok, aby zastosować szybkie sortowanie, przetestowałem ją na tych przykładowych danych:
8 2 5 13 4 19 12 6 3 11 10 7 9
poprawnym wyjściem powinno być:
6 2 5 7 4 3 8 12 19 11 10 13 9
ale rzeczywisty wynik to:
6 2 5 13 4 3 8 12 19 11 10 7 9
Algorytm musi się zamienić13
z7
ale zawodzi z powodu&&
warunek w powyższej pętli. Chcę zwiększyćleft
tylko, jeżelia[left] >= pivot
i dekrementacjaright
tylko, jeżelia[right]<= pivot
.