fil quicksort
Mariusz:
https://prnt.sc/stszo0
Znalazłem u pewnej Hinduski kod quick sorta
Jednak ma pewien błąd w funkcji partycjonującej
Ciekaw jestem czy znajdziesz błąd
Ona bierze pierwszy element jako tzw pivot
Jak zmodyfikowałbyś jej kod aby na tzw pivota był brany
losowo wybrany element
Jak według ciebie wyglądałby iteracyjny równoważnik tego algorytmu
4 cze 18:05
fil: W sensie iteracyjny quicksort? to chyba na std::stack() sie robi
4 cze 18:22
Mariusz:
No tak ale zobacz na kod jej programu
Coś nie tak jest z wersją rekurencyjną przedstawionego przez nią algorytmu
https://ideone.com/865Hcm
4 cze 19:27
fil: A co to jest lB (lower bound) oraz uB (upper bound) −− z tego co ona robi, wynika ze sa to
indeksy tak?
4 cze 19:30
fil: I wedlug mnie brakuje ifow() w ciele funkcji quicksort()
4 cze 19:30
fil: A raczej juz mam blad, w ifie powinno byc "lb + 1 < ub"
4 cze 19:37
fil: Jednak nie, szukam dalej
4 cze 19:39
Mariusz:
Dobrze odczytałeś znaczenie zmiennych lb oraz ub
Jeśli chcesz wskazówkę to przeanalizuj obieg głównej pętli w funkcji Partition
4 cze 19:44
fil: ehh, nadal nic, dlatego sie nie pisze wlasnorecznie wbudowanych funkcji. Jak ten caly kod mozna
zmienic:
const auto pivot
iter = std:
rev(end);
const auto par
point = std:
artition(begin, end, [pivot
iter](auto arg) {
return arg < *pivot
iter;
});
gdzie begin, end to ireratory
4 cze 20:06
Mariusz:
nie pisze wlasnorecznie wbudowanych funkcji
no a później się nie wie jak dany algorytm działa
a poza tym z czytaniem kodu też są problemy
4 cze 20:49
Mariusz:
Ja wiem gdzie ta Hinduska ma błąd
Chciałem sprawdzić czy tobie uda się go wskazać
Gdybyś wczytał się w kod to pewnie też byś
4 cze 21:39
fil: Czesc Mariusz, troche mi sie zapomnialo aby tu zajrzec bo jutro juz zaczynam matury
. Czy
blad jest w tym momencie?
while (A[start] <= pivot) start++ −−− w warunku while() nie powinnismy dodac jeszcze jednego
warunku, ze start < A.size() − 1?
7 cze 11:25
Mariusz:
No właśnie znalazłeś błąd
Aby go naprawić popatrz na warunek z zewnętrznej pętli
Wydaje mi się że wystarczy dopisać we wskazanej przez ciebie pętli
warunek z poprzedniej pętli przy czym ten warunek z poprzedniej pętli
musi być sprawdzany jako pierwszy
Ta Hinduska po prostu nie sprawdzała czy czy wewnętrzna iteracja się zatrzyma
Powodzenia na maturze
Ja z matematyki miałem dobry z pisemnego i bardzo dobry z ustnego
U mnie matematyka to był przedmiot z wyboru
W maju tego roku minęła okrągła rocznica mojej matury
7 cze 12:58
fil: A w twoich czasach byla juz matura z informatyki?
7 cze 14:44
7 cze 17:06