Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php Prezentowane materały są przeznaczone dla ucznów szkół ponadgmnazalnych. Autor artykułu: mgr Jerzy Wałaszek, Wersa 4.1 Sortowane szybke Quck Sort Podrozdzały Algorytm Tworzene partyc Specyfkaca problemu Lsta kroków Schemat blokowy Programy Program w ęzyku Pascal Program w ęzyku C++ Program w ęzyku Basc Program w ęzyku JavaScrpt Badane algorytmów sortuących Podsumowane Zadana dla ambtnych Algorytm Algorytm sortowana szybkego opera sę na strateg "dzel zwycęża" (ang. dvde and conquer), którą możemy krótko scharakteryzować w trzech punktach: 1. 2. 3. DZIEL - problem główny zostae podzelony na podproblemy ZWYCIĘŻAJ - znaduemy rozwązane podproblemów POŁĄCZ - rozwązana podproblemów zostaą połączone w rozwązane problemu głównego Idea sortowana szybkego est następuąca: DZIEL : naperw sortowany zbór dzelmy na dwe częśc w tak sposób, aby wszystke elementy leżące w perwsze częśc (zwane lewą partycą) były mnesze lub równe od wszystkch elementów druge częśc zboru (zwane prawą partycą). ZWYCIĘŻAJ : każdą z partyc sortuemy rekurencyne tym samym algorytmem. POŁĄCZ : połączene tych dwóch partyc w eden zbór dae w wynku zbór posortowany. prof. Tony Hoare Sortowane szybke zostało wynalezone przez angelskego nformatyka, profesora Tony'ego Hoare'a w latach 60-tych ubegłego weku. W przypadku typowym algorytm ten est naszybszym algorytmem sortuącym z klasy złożonośc oblczenowe O(n log n) - stąd pochodz ego popularność w zastosowanach. Musmy ednak pamętać, ż w pewnych sytuacach (zależnych od sposobu wyboru pwotu oraz nekorzystnego ułożena danych weścowych) klasa złożonośc oblczenowe tego algorytmu może sę degradować do O(n 2 ), co węce, pozom wywołań rekurencynych może spowodować przepełnene stosu zablokowane komputera. Z tych powodów algorytmu sortowana szybkego ne można stosować bezmyślne w każde sytuac tylko dlatego, ż est uważany za eden z naszybszych algorytmów sortuących - zawsze należy przeprowadzć analzę możlwych danych weścowych 1 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php właśne pod kątem przypadku nekorzystnego - czasem lepszym rozwązanem może być zastosowane wcześne opsanego algorytmu sortowana przez kopcowane, który ngdy ne degradue sę do klasy O(n 2 ). Tworzene partyc Do utworzena partyc musmy ze zboru wybrać eden z elementów, który nazwemy pwotem. W lewe partyc znadą sę wszystke elementy newększe od pwotu, a w prawe partyc umeścmy wszystke elementy nemnesze od pwotu. Położene elementów równych ne wpływa na proces sortowana, zatem mogą one występować w obu partycach. Równeż porządek elementów w każde z partyc ne est ustalony. Jako pwot można wyberać element perwszy, środkowy, ostatn, medanę lub losowy. Dla naszych potrzeb wyberzemy element środkowy: pwot d[(lewy + prawy) dv 2] pwot - element podzałowy d[ ] - dzelony zbór lewy - ndeks perwszego elementu prawy - ndeks ostatnego elementu Dzelene na partyce polega na umeszczenu dwóch wskaźnków na początku zboru - oraz. Wskaźnk przebega przez zbór poszukuąc wartośc mneszych od pwotu. Po znalezenu take wartośc est ona wymenana z elementem na pozyc. Po te operac wskaźnk est przesuwany na następną pozycę. Wskaźnk zapamętue pozycę, na którą traf następny element oraz na końcu wskazue mesce, gdze znadze sę pwot. W trakce podzału pwot est bezpeczne przechowywany na ostatne pozyc w zborze. Przykład: Dla przykładu podzelmy na partyce zbór: { 7 2 4 7 3 1 4 6 5 8 3 9 2 6 7 6 3 } Lp. Operaca Ops 1. 7 2 4 7 3 1 4 6 5 8 3 9 2 6 7 6 3 Wyznaczamy na pwot element środkowy. 2. 7 2 4 7 3 1 4 6 3 8 3 9 2 6 7 6 5 Pwot wymenamy z ostatnm elementem zboru 3. 4. 7 2 4 7 3 1 4 6 3 8 3 9 2 6 7 6 5 7 2 4 7 3 1 4 6 3 8 3 9 2 6 7 6 5 Na początku zboru ustawamy dwa wskaźnk. Wskaźnk będze przeglądał zbór do przedostatne pozyc. Wskaźnk zapamętue mesce wstawana elementów mneszych od pwotu Wskaźnkem szukamy elementu mneszego od pwotu 2 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php 5. 2 7 4 7 3 1 4 6 3 8 3 9 2 6 7 6 5 Znalezony element wymenamy z elementem na pozyc -te. Po wymane wskaźnk przesuwamy o 1 pozycę. 6. 2 7 4 7 3 1 4 6 3 8 3 9 2 6 7 6 5 Szukamy 7. 2 4 7 7 3 1 4 6 3 8 3 9 2 6 7 6 5 Wymenamy przesuwamy. 8. 2 4 7 7 3 1 4 6 3 8 3 9 2 6 7 6 5 Szukamy 9. 2 4 3 7 7 1 4 6 3 8 3 9 2 6 7 6 5 Wymenamy przesuwamy. 10. 2 4 3 7 7 1 4 6 3 8 3 9 2 6 7 6 5 Szukamy 11. 2 4 3 1 7 7 4 6 3 8 3 9 2 6 7 6 5 Wymenamy przesuwamy. 12. 2 4 3 1 7 7 4 6 3 8 3 9 2 6 7 6 5 Szukamy 13. 2 4 3 1 4 7 7 6 3 8 3 9 2 6 7 6 5 Wymenamy przesuwamy. 14. 2 4 3 1 4 7 7 6 3 8 3 9 2 6 7 6 5 Szukamy 15. 2 4 3 1 4 3 7 6 7 8 3 9 2 6 7 6 5 Wymenamy przesuwamy. 16. 2 4 3 1 4 3 7 6 7 8 3 9 2 6 7 6 5 Szukamy 17. 2 4 3 1 4 3 3 6 7 8 7 9 2 6 7 6 5 Wymenamy przesuwamy. 18. 2 4 3 1 4 3 3 6 7 8 7 9 2 6 7 6 5 Szukamy 3 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php 19. 2 4 3 1 4 3 3 2 7 8 7 9 6 6 7 6 5 Wymenamy przesuwamy. 20. 2 4 3 1 4 3 3 2 5 8 7 9 6 6 7 6 7 ^ Lewa partyca Prawa partyca Brak dalszych elementów do wymany. Pwot wymenamy z elementem na pozyc -te. Podzał na partyce zakończony. Po zakończenu podzału na partyce wskaźnk wyznacza pozycę pwotu. Lewa partyca zawera elementy mnesze od pwotu rozcąga sę od początku zboru do pozyc - 1. Prawa partyca zawera elementy wększe lub równe pwotow rozcąga sę od pozyc + 1 do końca zboru. Operaca podzału na partyce ma lnową klasę złożonośc oblczenowe - O(n). Specyfkaca problemu Sortu_szybko(lewy, prawy) Dane weścowe d[ ] - Zbór zaweraący elementy do posortowana. Zakres ndeksów elementów est dowolny. lewy - ndeks perwszego elementu w zborze, lewy Î C prawy - ndeks ostatnego elementu w zborze, prawy Î C Dane wyścowe d[ ] - Zbór zaweraący elementy posortowane rosnąco Zmenne pomocncze pwot - element podzałowy, - ndeksy,, Î C Lsta kroków K01: [ lewy + prawy ] 2 K02: pwot d[]; d[] d[prawy]; lewy K03: Dla = lewy, lewy + 1,..., prawy - 1: wykonu K04...K05 K04: Jeśl d[] pwot, to wykona koleny obeg pętl K03 K05: d[] d[]; + 1 K06: d[prawy] d[]; d[] pwot K07: Jeśl lewy < - 1, to Sortu_szybko(lewy, - 1) K08: Jeśl + 1 < prawy, to Sortu_szybko( + 1, prawy) K09: Zakończ Algorytm sortowana szybkego wywołuemy podaąc za lewy ndeks perwszego elementu zboru, a za prawy ndeks elementu ostatnego (czyl Sortu_szybko(1,n)). Zakres ndeksów est dowolny - dzęk temu ten sam algorytm może równeż sortować fragment zboru, co wykorzystuemy przy sortowanu 4 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php wylczonych partyc. Schemat blokowy Na element podzałowy wyberamy element leżący w środku dzelone partyc. Wylczamy ego pozycę zapamętuemy ą tymczasowo w zmenne. Robmy to po to, aby dwukrotne ne wykonywać tych samych rachunków. Element d[] zapamętuemy w zmenne pwot, a do d[] zapsuemy ostatn element partyc. Dzęk te operac pwot został usunęty ze zboru. Ustawamy zmenną na początek partyc. Zmenna ta zapamętue pozycę podzału partyc. W pętl sterowane zmenną przeglądamy kolene elementy od perwszego do przedostatnego (ostatn został umeszczony na pozyc pwotu, a pwot zapamętany). Jeśl -ty element est mneszy od pwotu, to trafa on na początek partyc - wymenamy ze sobą elementy na pozycach -te -te. Po te operac przesuwamy punkt podzałowy partyc. Po zakończenu pętl element z pozyc -te przenosmy na konec partyc, aby zwolnć mesce dla pwotu, po czym wstawamy tam pwot. Zmenna wskazue zatem wynkową pozycę pwotu. Perwotna partyca została podzelona na dwe partyce: partyca lewa od pozyc lewy do - 1 zawera elementy mnesze od pwotu partyca prawa od pozyc + 1 do pozyc prawy zawera elementy wększe lub równe pwotow. Sprawdzamy, czy partyce te obemuą węce nż eden element. Jeśl tak, to wywołuemy rekurencyne algorytm sortowana szybkego przekazuąc mu grance wyznaczonych partyc. Po powroce z wywołań rekurencynych partyca wyścowa est posortowana rosnąco. Kończymy algorytm. Programy Efekt uruchomena programu Sortowane szybke ------------------------ (C)2005 Jerzy Walaszek Przed sortowanem: 46 5 56 35 75 95 33 93 4 71 8 5 69 50 35 34 65 32 72 61 Po sortowanu: 4 5 5 8 32 33 34 35 35 46 50 56 61 65 69 71 72 75 93 95 5 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php DevPascal // Sortowane Szybke //-------------------------------------------------------- // (C)2012 I LO w Tarnowe // I Lceum Ogólnokształcące // m. K. Brodzńskego // w Tarnowe //-------------------------------------------------------- program Quck_Sort; const N = 20; // Lczebność zboru. var d : array[1..n] of nteger; // Procedura sortowana szybkego //------------------------------- procedure Sortu_szybko(lewy, prawy : nteger); var,,pwot,x : nteger; begn := (lewy + prawy) dv 2; pwot := d[]; d[] := d[prawy]; := lewy; for := lewy to prawy - 1 do f d[] < pwot then begn x := d[]; d[] := d[]; d[] := x; nc(); d[prawy] := d[]; d[] := pwot; f lewy < - 1 then Sortu_szybko(lewy, - 1); f + 1 < prawy then Sortu_szybko( + 1, prawy); // Program główny //--------------- var : nteger; begn wrteln(' Sortowane szybke'); wrteln('------------------------'); wrteln(' (C)2005 Jerzy Walaszek '); wrteln; // Naperw wypełnamy tablcę d[] lczbam pseudolosowym // a następne wyśwetlamy e zawartość randomze; for := 1 to N do d[] := random(100); wrteln('przed sortowanem:'); wrteln; for := 1 to N do wrte(d[] : 4); wrteln; // Sortuemy Sortu_szybko(1,N); // Wyśwetlamy wynk sortowana wrteln('po sortowanu:'); wrteln; 6 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php for := 1 to N do wrte(d[] : 4); wrteln; wrteln('nacsn Enter...'); readln; end. Code::Blocks // Sortowane Szybke //-------------------------------------------------------- // (C)2012 I LO w Tarnowe // I Lceum Ogólnokształcące // m. K. Brodzńskego // w Tarnowe //-------------------------------------------------------- #nclude <ostream> #nclude <omanp> #nclude <cstdlb> #nclude <tme.h> usng namespace std; const nt N = 20; // Lczebność zboru. nt d[n]; // Procedura sortowana szybkego //------------------------------- vod Sortu_szybko(nt lewy, nt prawy) { nt,,pwot; } = (lewy + prawy) / 2; pwot = d[]; d[] = d[prawy]; for( = = lewy; < prawy; ++) f(d[] < pwot) { swap(d[], d[]); ++; } d[prawy] = d[]; d[] = pwot; f(lewy < - 1) Sortu_szybko(lewy, - 1); f( + 1 < prawy) Sortu_szybko( + 1, prawy); // Program główny //--------------- nt man() { nt ; srand((unsgned)tme(null)); cout << " Sortowane szybke\n" "------------------------\n" " (C)2005 Jerzy Walaszek \n\n" "Przed sortowanem:\n\n"; // Naperw wypełnamy tablcę d[] lczbam pseudolosowym // a następne wyśwetlamy e zawartość for( = 0; < N; ++) d[] = rand() % 100; 7 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php for( = 0; < N; ++) cout << setw(4) << d[]; cout << endl; // Sortuemy Sortu_szybko(0,N - 1); // Wyśwetlamy wynk sortowana } cout << "Po sortowanu:\n\n"; for( = 0; < N; ++) cout << setw(4) << d[]; cout << endl; return 0; Free Basc ' Sortowane szybke '-------------------------------------------------------- ' (C)2012 I LO w Tarnowe ' I Lceum Ogólnokształcące ' m. K. Brodzńskego ' w Tarnowe '-------------------------------------------------------- Declare Sub Sortu_szybko(lewy As Integer, prawy As Integer) Const N = 20 ' lczebność zboru Dm Shared d(n) As Integer Dm As Integer Prnt " Sortowane szybke" Prnt "-----------------------" Prnt "(C)2005 Jerzy Walaszek" Prnt Prnt "Przed sortowanem:": Prnt ' Wypełnamy tablcę lczbam pseudolosowym wyśwetlamy e Randomze For = 1 To N d() = Int(Rnd * 100): Prnt Usng "####";d(); Next Prnt ' Sortuemy Sortu_szybko(1,N) ' Wyśwetlamy wynk sortowana Prnt "Po sortowanu:": Prnt For = 1 To N: Prnt Usng "####";d();: Next Prnt Prnt "Nacsn Enter..." Sleep End ' Procedura sortowana szybkego '------------------------------- Sub Sortu_szybko(lewy As Integer, prawy As Integer) Dm As Integer,, pwot 8 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php = (lewy + prawy) \ 2 pwot = d(): d() = d(prawy) = lewy For = lewy To prawy - 1 If d() < pwot Then Swap d(), d() += 1 End If Next d(prawy) = d(): d() = pwot If lewy < - 1 Then Sortu_szybko(lewy, - 1) If + 1 < prawy Then Sortu_szybko( + 1, prawy) End Sub JavaScrpt <html> <head> </head> <body> <form style="border-right: #ff9933 1px outset; PADDING-RIGHT: 4px; BORDER-TOP: #ff9933 1px outset; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: #ff9933 1px outset; PADDING-TOP: 1px; BORDER-BOTTOM: #ff9933 1px outset; BACKGROUND-COLOR: #ffcc66" name="frmqucksort"> <h3 style="text-algn: center">sortowane Szybke</h3> <p style="text-align: center"> (C)2012 I LO w Tarnowe - I LO w Tarnowe </p> <hr> <p style="text-align: center"> <nput onclck="man()" type="button" value="sortu" name="b1"> </p> <p d="t_out" style="text-align: center">...</p> </form> <scrpt language=avascrpt> // Sortowane Szybke //-------------------------------------------------------- // (C)2012 I LO w Tarnowe // I Lceum Ogólnokształcące // m. K. Brodzńskego // w Tarnowe //-------------------------------------------------------- var N = 20; // Lczebność zboru. var d = new Array(N) // Procedura sortowana szybkego //------------------------------- functon Sortu_szybko(lewy, prawy) { var,,pwot,x; = Math.floor((lewy + prawy) / 2); pwot = d[]; d[] = d[prawy]; for( = = lewy; < prawy; ++) f(d[] < pwot) { x = d[]; d[] = d[]; d[] = x; ++; 9 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php } } d[prawy] = d[]; d[] = pwot; f(lewy < - 1) Sortu_szybko(lewy, - 1); f( + 1 < prawy) Sortu_szybko( + 1, prawy); // Program główny //--------------- functon man() { var,t; // Naperw wypełnamy tablcę d[] lczbam pseudolosowym // a następne wyśwetlamy e zawartość for( = 0; < N; ++) d[] = Math.floor(Math.random() * 100); t = "Przed sortowanem:<br><br>"; for( = 0; < N; ++) t += d[] + " "; // Sortuemy Sortu_szybko(0, N - 1); // Wyśwetlamy wynk sortowana } t += "<BR><BR>Po sortowanu:<br><br>"; for( = 0; < N; ++) t += d[] + " "; document.getelementbyid("t_out").nnerhtml = t </scrpt> </body> </html> Tuta możesz przetestować dzałane prezentowanego skryptu: Sortowane Szybke (C)2012 I LO w Tarnowe - I LO w Tarnowe Sortu... Badane algorytmów sortowana W celach badawczych testuemy czas wykonana algorytmu sortowana szybkego w środowsku opsanym we wstępe. Program testuący est następuący: DLA GENIUSZA DevPascal // Program testuący czas sortowana dla // danego algorytmu sortuącego //-------------------------------------- // (C)2012 I LO w Tarnowe 10 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php // I Lceum Ogólnokształcące // w Tarnowe //-------------------------------------- program TestCzasuSortowana; uses Wndows; const NAZWA = 'Sortowane szybke'; K1 = '-----------------------------------------------------------'; K2 = '(C)2011/2012 I Lceum Ogolnoksztalcace w Tarnowe'; K3 = '------n---------tpo---------tod---------tpp---------tpk---------tnp'; K4 = '-------------------------------------------------------------------'; MAX_LN = 8; // określa ostatne LN LN : array[1..8] of nteger = (1000,2000,4000,8000,16000,32000,64000,128000); var d : array[1..128000] of real; // sortowana tablca n : nteger; // lczba elementów qpf,tqpc : nt64; // dane dla pomaru czasu qpc1,qpc2 : nt64; // Tuta umeszczamy procedurę sortuącą tablcę d //------------------------------------------------------- procedure Sortu_szybko(lewy, prawy : nteger); var, : nteger; pwot,x : real; begn := (lewy + prawy) dv 2; pwot := d[]; d[] := d[prawy]; := lewy; for := lewy to prawy - 1 do f d[] < pwot then begn x := d[]; d[] := d[]; d[] := x; nc(); d[prawy] := d[]; d[] := pwot; f lewy < - 1 then Sortu_szybko(lewy, - 1); f + 1 < prawy then Sortu_szybko( + 1, prawy); functon Sort : extended; begn QueryPerformanceCounter(addr(qpc1)); Sortu_szybko(1,n); QueryPerformanceCounter(addr(qpc2)); Sort := (qpc2 - qpc1 - tqpc) / qpf; // Program główny //--------------- var,,k : nteger; tpo,tod,tpp,tpk,tnp : extended; f : Text; begn f QueryPerformanceFrequency(addr(qpf)) then begn QueryPerformanceCounter(addr(qpc1)); QueryPerformanceCounter(addr(qpc2)); 11 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php tqpc := qpc2 - qpc1; assgnfle(f,'wynk.txt'); rewrte(f); // Wydruk na ekran wrteln('nazwa: ',NAZWA); wrteln(k1); wrteln(k2); wrteln; wrteln(k3); // Wydruk do plku wrteln(f,'nazwa: ',NAZWA); wrteln(f,k1); wrteln(f,k2); wrteln(f,''); wrteln(f,k3); for := 1 to MAX_LN do begn n := LN[]; // Czas sortowana zboru posortowanego for := 1 to n do d[] := ; tpo := Sort; // Czas sortowana zboru posortowanego odwrotne for := 1 to n do d[] := n - ; tod := Sort; // Czas sortowana zboru posortowanego // z przypadkowym elementem na początku - średna z 10 obegów tpp := 0; for := 1 to 10 do begn for k := 1 to n do d[k] := k; d[1] := random * n + 1; tpp += Sort; tpp /= 10; // Czas sortowana zboru posortowanego // z przypadkowym elementem na końcu - średna z 10 obegów tpk := 0; for := 1 to 10 do begn for k := 1 to n do d[k] := k; d[n] := random * n + 1; tpk += Sort; tpk /= 10; // Czas sortowana zboru neuporządkowanego - średna z 10 obegów tnp := 0; for := 1 to 10 do begn for k := 1 to n do d[k] := random; tnp += Sort; 12 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php tnp /= 10; wrteln(n:7,tpo:12:6,tod:12:6,tpp:12:6,tpk:12:6,tnp:12:6); wrteln(f,n:7,tpo:12:6,tod:12:6,tpp:12:6,tpk:12:6,tnp:12:6); wrteln(k4); wrteln(f,k4); wrteln(f,'konec'); closefle(f); wrteln; wrteln('konec. Wynk w plku WYNIKI.TXT'); end else wrteln('na tym komputerze program testowy ne pracue!'); wrteln; wrte('nacsn klawsz ENTER...'); readln; end. Otrzymane wynk są następuące (dla komputera o nnych parametrach wynk mogą sę różnć co do wartośc czasów wykonana, dlatego w celach porównawczych proponuę uruchomć podany program na komputerze czytelnka): Zawartość plku wygenerowanego przez program Nazwa: Sortowane szybke ----------------------------------------------------------- (C)2011/2012 I Lceum Ogolnoksztalcace w Tarnowe ------n---------tpo---------tod---------tpp---------tpk---------tnp 1000 0.000115 0.000118 0.000132 0.000136 0.000292 2000 0.000222 0.000227 0.000270 0.000284 0.000616 4000 0.000464 0.000479 0.000556 0.000569 0.001330 8000 0.001058 0.001079 0.001216 0.001225 0.002825 16000 0.002124 0.002185 0.002472 0.002549 0.006088 32000 0.004593 0.004465 0.005211 0.005104 0.012763 64000 0.009873 0.010195 0.010849 0.011224 0.027306 128000 0.020037 0.021543 0.022796 0.022578 0.057542 ------------------------------------------------------------------- Konec Obaśnena oznaczeń (wszystke czasy podano w sekundach): n - lość elementów w sortowanym zborze t po - czas sortowana zboru posortowanego t od - czas sortowana zboru posortowanego maleąco t pp - czas sortowana zboru posortowanego z losowym elementem na początku t pk - czas sortowana zboru posortowanego z losowym elementem na końcu t np - czas sortowana zboru z losowym rozkładem elementów Podsumowane (Arkusz kalkulacyny Excel do wyznaczana klasy czasowe złożonośc oblczenowe) (Arkusz kalkulacyny Excel do wyznaczana wzrostu prędkośc sortowana) Analzuąc wynk oblczeń w arkuszu kalkulacynym otrzymanych czasów sortowana dla algorytmu sortowana szybkego wycągamy następuące wnosk: Cechy Algorytmu Sortowana Szybkego 13 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php klasa złożonośc oblczenowe optymstyczna O(n log n) klasa złożonośc oblczenowe typowa klasa złożonośc oblczenowe pesymstyczna O(n 2 ) Sortowane w mescu Stablność TAK NIE Klasy złożonośc oblczenowe szacuemy następuąco: optymstyczna - dla zborów uporządkowanych (z newelką lczbą elementów ne na swoch mescach) - na podstawe czasów t po, t pp, t pk typowa - dla zborów o losowym rozkładze elementów - na podstawe czasu t np pesymstyczna - dla zborów posortowanych odwrotne - na podstawe czasu t od. W przypadku tego algorytmu sortowana ne est to przypadek pesymstyczny. Własnośc algorytmu Algorytm t po t od t pp t pk t np O(n log n) O(n log n) O(n log n) O(n log n) O(n log n) Sortowane szybke t po t od t pp t pk t np 8 t od 3 1. 2. 3. 4. Wszystke otrzymane czasy sortowana są proporconalne do loczynu n log 2 n, wnoskuemy zatem, ż klasa złożonośc oblczenowe algorytmu sortowana szybkego est równa O(n log n). Czasy sortowana dla poszczególnych przypadków są mne węce tego samego rzędu, zatem ne wystąpł tuta przypadek pesymstyczny (zwróć uwagę na stotny fakt - to, co dla ednego algorytmu est przypadkem pesymstycznym, dla nnego wcale ne mus take być). Czas sortowana zborów neuporządkowanych est wyraźne dłuższy od czasów sortowana zborów uporządkowanych częścowo. Czas sortowana zboru uporządkowanego oraz uporządkowanego odwrotne est praktyczne tak sam. Wzrost prędkośc sortowana Algorytmy t po t od t pp t pk t np Sortowane przez scalane Sortowane szybke 3 8 5 5 1 3 2 2 dobrze dobrze dobrze dobrze brak 5. 6. Otrzymane wynk potwerdzaą, ż algorytm sortowana szybkego est naszybszym algorytmem sortuącym. Jednakże w przypadku ogólnym notuemy edyne bardzo neznaczny wzrost prędkośc sortowana w stosunku do algorytmu sortowana przez scalane. Poneważ ak dotąd algorytm sortowana szybkego est naszybszym algorytmem sortuącym, do dalszych porównań czasów sortowana zastosuemy czasy uzyskane w tym algorytme. Zadana dla ambtnych 1. 2. Spróbu znaleźć przypadek pesymstyczny dla algorytmu sortowana szybkego opsanego w tym rozdzale. Przebada algorytmy sortowana szybkego, w których pwot wyberany est: a. b. Na początku partyc Na końcu partyc 14 of 15 10/10/2013 03:20 PM
Algorytmy Sortuące - Sortowane szybke http://edu.-lo.tarnow.pl/nf/alg/003_sort/0018.php c. W mescu losowym wewnątrz partyc 3. 4. 5. Dlaczego czasy sortowana zboru uporządkowanego uporządkowanego odwrotne są prawe równe? Uzasadn, ż algorytm sortowana szybkego ne posada cechy stablnośc. Wyszuka w Internece nformacę na temat algorytmu Introsort. Lst do admnstratora Serwsu Edukacynego I LO Twó emal: odpowedź) (eśl chcesz otrzymać Temat: Uwaga: tuta wpsz wyraz lo, nacze lst zostane zgnorowany Ponże wpsz swoe uwag lub pytana dotyczące tego rozdzału (max. 2048 znaków). Lczba znaków do wykorzystana: 2048 Wyśl Kasu W zwązku z dużą lczbą lstów do naszego serwsu edukacynego ne będzemy udzelać odpowedz na prośby rozwązywana zadań, psana programów zalczenowych, przesyłana materałów czy też tłumaczena zagadneń szeroko opsywanych w podręcznkach. Dokument ten rozpowszechnany est zgodne z zasadam lcenc GNU Free Documentaton Lcense. I Lceum Ogólnokształcące m. Kazmerza Brodzńskego w Tarnowe (C)2013 mgr Jerzy Wałaszek 15 of 15 10/10/2013 03:20 PM