matematykaszkolna.pl
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 pivotiter = std:rev(end); const auto parpoint = std:artition(begin, end, [pivotiter](auto arg) { return arg < *pivotiter; }); 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 emotka. 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
Mariusz: Nie pamiętam już dokładnie Jeśli chodzi o iteracyjną wersję Quick Sorta to nie podałeś szczegółów ale pewną propozycję podają na ważniaku http://wazniak.mimuw.edu.pl/index.php?title=Algorytmy_i_struktury_danych/Sortowanie:_MergeSort%2C_HeapSort_i_QuickSort na samym końcu artykułu
7 cze 17:06