Sortowanie szybkie Quick Sort

Podobne dokumenty
Sortowanie szybkie Quick Sort

Sortowanie stogowe Heap Sort

Sortowanie przez scalanie Merge Sort

Przeliczanie na zapis stałoprzecinkowy

Problem plecakowy (KNAPSACK PROBLEM).

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

Weryfikacja hipotez dla wielu populacji

BADANIA OPERACYJNE. Podejmowanie decyzji w warunkach niepewności. dr Adam Sojda

Wstęp Funkcja pliki nagłówkowe i typ tablicowy. Wstęp Pliki nagłówkowe i typ tablicowy. Wstęp Funkcja fill_array() Wstęp. Notatki. Notatki.

Liczby pierwsze - generacja liczb pierwszych

Liczby pierwsze - sito Eratostenesa

Wykład 1 Zagadnienie brzegowe liniowej teorii sprężystości. Metody rozwiązywania, metody wytrzymałości materiałów. Zestawienie wzorów i określeń.

STATYSTYKA MATEMATYCZNA WYKŁAD 5 WERYFIKACJA HIPOTEZ NIEPARAMETRYCZNYCH

Całkowanie numeryczne - metoda prostokątów

WikiWS For Business Sharks

Całkowanie numeryczne - metoda Simpsona

Algorytmy. i podstawy programowania. eci. Proste algorytmy sortowania tablic. 4. Wskaźniki i dynamiczna alokacja pami

W praktyce często zdarza się, że wyniki obu prób możemy traktować jako. wyniki pomiarów na tym samym elemencie populacji np.

Sortowanie przez scalanie

Wyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

I. Elementy analizy matematycznej

Analiza danych OGÓLNY SCHEMAT. Dane treningowe (znana decyzja) Klasyfikator. Dane testowe (znana decyzja)

Rozwiązywanie zadań optymalizacji w środowisku programu MATLAB

ZESTAW ZADAŃ Z INFORMATYKI

Stanisław Cichocki Natalia Nehrebecka. Zajęcia 4

Przykład 5.1. Kratownica dwukrotnie statycznie niewyznaczalna

Sortowanie przez wstawianie Insertion Sort

Zmodyfikowana technika programowania dynamicznego

SZTUCZNA INTELIGENCJA

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

(3 kwiecień 2014) Marika Pankowska Kamila Pietrzak

Strategia "dziel i zwyciężaj"

Podstawy teorii falek (Wavelets)

Natalia Nehrebecka. Zajęcia 4

Zaawansowane metody numeryczne

KURS STATYSTYKA. Lekcja 1 Statystyka opisowa ZADANIE DOMOWE. Strona 1

RÓWNOWAGA STACKELBERGA W GRACH SEKWENCYJNYCH

Algorytmy i Struktury Danych.

Miejsca zerowe funkcji - Metoda połowienia

Badanie współzależności dwóch cech ilościowych X i Y. Analiza korelacji prostej

p Z(G). (G : Z({x i })),

Palindromy. Przykładowe rozwiązanie

Typ może być dowolny. //realizacja funkcji zamiana //przestawiajacej dwa elementy //dowolnego typu void zamiana(int &A, int &B) { int t=a; A=B; B=t; }

Projekt 6 6. ROZWIĄZYWANIE RÓWNAŃ NIELINIOWYCH CAŁKOWANIE NUMERYCZNE

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmy i struktury danych

65120/ / / /200

Plan wykładu: Typowe dane. Jednoczynnikowa Analiza wariancji. Zasada: porównać zmienność pomiędzy i wewnątrz grup

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

Regulamin promocji 14 wiosna

Statystyka Opisowa 2014 część 1. Katarzyna Lubnauer

Zaawansowane metody numeryczne Komputerowa analiza zagadnień różniczkowych 1. Układy równań liniowych

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

Podstawy Programowania

EKONOMETRIA I Spotkanie 1, dn

Miejsca zerowe funkcji - Metoda Newtona

Programowanie Równoległe i Rozproszone

) będą niezależnymi zmiennymi losowymi o tym samym rozkładzie normalnym z następującymi parametrami: nieznaną wartością 1 4

Programowanie Proceduralne

D Archiwum Prac Dyplomowych - Instrukcja dla studentów

Programowanie w VB Proste algorytmy sortowania

Wstęp do programowania

Badania sondażowe. Braki danych Konstrukcja wag. Agnieszka Zięba. Zakład Badań Marketingowych Instytut Statystyki i Demografii Szkoła Główna Handlowa

ANALIZA KORELACJI WYDATKÓW NA KULTURĘ Z BUDŻETU GMIN ORAZ WYKSZTAŁCENIA RADNYCH

MATEMATYKA POZIOM ROZSZERZONY Kryteria oceniania odpowiedzi. Arkusz A II. Strona 1 z 5

Stanisław Cichocki. Natalia Nehrebecka. Wykład 6

Ilość cyfr liczby naturalnej

Proces narodzin i śmierci

Zapis informacji, systemy pozycyjne 1. Literatura Jerzy Grębosz, Symfonia C++ standard. Harvey M. Deitl, Paul J. Deitl, Arkana C++. Programowanie.

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Algorytmy i struktury danych

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Anna Sobocińska Sylwia Piwońska

Odtworzenie wywodu metodą wstępującą (bottom up)

Wstęp do programowania

Krzysztof Borowski Zastosowanie metody wideł cenowych w analizie technicznej

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Sortowanie Shella Shell Sort

KRZYWA BÉZIERA TWORZENIE I WIZUALIZACJA KRZYWYCH PARAMETRYCZNYCH NA PRZYKŁADZIE KRZYWEJ BÉZIERA

Regulamin promocji zimowa piętnastka

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Badania operacyjne w logistyce i zarządzaniu produkcją


ANALIZA WARIANCJI (ANOVA) Spis treści

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

Minister Edukacji Narodowej Pani Katarzyna HALL Ministerstwo Edukacji Narodowej al. J. Ch. Szucha Warszawa Dnia 03 czerwca 2009 r.

Natalia Nehrebecka. Wykład 2

Statystyka Inżynierska

Statystyka. Zmienne losowe

Regulamin promocji upalne lato

SZACOWANIE NIEPEWNOŚCI POMIARU METODĄ PROPAGACJI ROZKŁADÓW

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algorytmy szukania równowag w grach dwumacierzowych

Wykład 6. Wyszukiwanie wzorca w tekście

Wykład 2: Uczenie nadzorowane sieci neuronowych - I

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Komputerowe generatory liczb losowych

Wstęp do programowania

Transkrypt:

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