Eksperymentuję ostatnio z wielodrożnymi QuickSortami, tzn takimi w których mamy więcej niż dwie partycje. Jak do tej pory wszystko idzie dobrze, ale zrobiłem ostatnio wariację 5-drożnego QuickSorta z dwoma pivotami, która źle działa i nie wiem czemu.
Cały kod jest tutaj: http://4programmers.net/Pastebin/1219
Chodzi mi o przejście z funkcji quicksortTwoSideLower1Equal1BetweenUnsortedBetweenEqual2HigherA do quicksortTwoSideLower1Equal1BetweenUnsortedBetweenEqual2HigherB. Ta pierwsza działa OK. Obie wersje, w trakcie działania utrzymują następującą postać tablicy:
mniejsze od pivot1 | równe pivot1 | pomiędzy pivotami | nieposortowane | pomiędzy pivotami | równe pivot2 | większe od pivot2
Zmienne left i right oznaczają końce nieposortowanego zakresu.
Przy przejściu z funkcji quicksortTwoSideLower1Equal1BetweenUnsortedBetweenEqual2HigherA do quicksortTwoSideLower1Equal1BetweenUnsortedBetweenEqual2HigherB wyrzuciłem jednego swapa (linijka 643 - wersja A, działająca), ale potem podmieniłem zmienne z left na right i odwrotnie. Patrzę na to i nie mogę dojść czemu taka zmiana psuje mi algorytm.
Ma ktoś jakiś pomysł? :)