Błędne wyniki QuickSorta

0

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ł? :)

0

Trochę sobie te algorytmy rozpisałem i stwierdziłem, że gra jest niewarta świeczki :P
Olewam wersję quicksortTwoSideLower1Equal1BetweenUnsortedBetweenEqual2HigherB :)

0

Wibowit. Z tymi nazwami to musiało Ci się chyba ostro nudzić by je wymyślać :P

0

Eeee tam. Budowa takiej nazwy jest bardzo prosta: quicksort + <oneSide/ twoSide zależnie czy mamy wskaźnik po jednej stronie nieposortowanej partycji czy dwa> + <sposób partycjonowania> + < a/ b/ itp jakaś nazwa wariacji > :)

Nie wiem w jaki wygodniejszy sposób przygotować się do testów prawie 10 wariacji quicksorta.

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