1 / 20

Algorytmy sortowania i przeszukiwania

Algorytmy sortowania i przeszukiwania. Spis treści. Sortowanie przez wstawianie - InsertSort Sortowanie przez wybór – SelectionSort Algorytm sortowania bąbelkowego Rekurencja Szybkie sortowanie - quicksort. Sortowanie przez wstawianie - InsertSort.

zayit
Télécharger la présentation

Algorytmy sortowania i przeszukiwania

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algorytmy sortowania i przeszukiwania

  2. Spis treści • Sortowanie przez wstawianie - InsertSort • Sortowanie przez wybór – SelectionSort • Algorytm sortowania bąbelkowego • Rekurencja • Szybkie sortowanie - quicksort

  3. Sortowanie przez wstawianie - InsertSort Metoda sortowania przez wstawianie używana jest najczęściej przez osoby grające w karty. Polega ona na założeniu, że w danym momencie w ręku trzymamy jednocześnie karty posortowane i nieposortowane. W celu realizacji zadania porządkowania należy pobrać ze sterty kart do posortowania kartę i wstawienia jej na odpowiednie miejsce w obszarze kart posortowanych. 3 4 7 6 8 1 Karty posortowane Karty do posortowania

  4. Sortowanie przez wstawianie - InsertSort Dane:n - liczba elementów w sortowanym zbiorze, d[ ] – zbiór, który będzie sortowany. Wynik: Uporządkowany zbiór d[ ] Algorytm: porządkowanie przez wstawianie– InsertSort Krok 1. Dla i = 1, 2, ..., n – 1wykonaj kroki 2 … 4, a następnie zakończ algorytm Krok 2. x ← d[j];  i ← j + 1 Krok 3. Dopóki ( i ≤ n )  ∧  ( x > d[i] ): wykonuj d[i - 1] ← d[i];  i ← i + 1 Krok 4 d[i - 1] ← x

  5. Sortowanie przez wstawianie - InsertSort for(j = n - 2; j >= 0; j--) { x = d[j]; i = j + 1; while((i < n) && (x > d[i])) { d[i - 1] = d[i]; i++; } d[i - 1] = x; }

  6. Sortowanie przez wstawianie - InsertSort • Wnioski: • - algorytm ten jest bardzo kosztownym algorytmem (klasa złożoności obliczeniowej – O(N2) • - nie nadaje się do porządkowania dużych zbiorów • postać algorytmu przejrzysta • algorytm krótki

  7. Sortowanie przez wybór - SelectionSort Metoda porządkowania przez wybór polega na porządkowaniu zbioru w sposób rosnący tzn. element najmniejszy powinien znaleźć się na pierwszej pozycji. Metoda ta polega na znalezieniu w zbiorze elementu najmniejszego i wymienieniu go z elementem na czytanej pozycji zbioru aż do całkowitego jego uporządkowania. Zbiór nieuporządkowany Etapy porządkowania

  8. Sortowanie przez wybór - SelectionSort Dane:n - liczba elementów zbioru, d[ ] – zbiór sortowany. Elementy zbioru mają indeksy od 1 do n. Wynik: Uporządkowany zbiór d[ ] Algorytm: porządkowanie przez wybór – Selection Sort Idea: najmniejszy wśród nieuporządkowanych daj na początek Krok 1. Dlaj = 1, 2, ..., n - 1: wykonuj Krok 1 ...Krok 4, a następnie zakończ algorytm Krok 2. pmin ← j Krok 3. Dlai = j + 1,  j + 2, ..., n: jeśli d[i] < d[pmin], topmin ← i Krok 4. d[j] ↔ d[pmin]

  9. Sortowanie przez wybór - SelectionSort for(j = 0; j < N - 1; j++) { pmin = j; for(i = j + 1; i < N; i++) { if(d[i] < d[pmin]) pmin = i; } swap(d[pmin], d[j]); }

  10. Sortowanie przez wybór - SelectionSort • Wnioski: • - algorytm ten jest bardzo kosztownym algorytmem (klasa złożoności obliczeniowej – O(N2) • - nie nadaje się do porządkowania dużych zbiorów • wykonuje taką samą ilość operacji porównania dla zbiorów częściowo uporządkowanych jak i dla zbiorów nieuporządkowanych • algorytm przejrzysty, zwięzły

  11. Algorytm sortowania bąbelkowego Metoda porządkowania bąbelkowego swoją nazwę wzięła od pęcherzyków powietrza ulatujących w górę tuby wypełnionej wodą. Metoda ta polega na analizowaniu dwóch sąsiadujących ze sobą elementów, jeśli nie są one uporządkowane następuje ich zamiana. Etapy Indeks tablicy

  12. Algorytm sortowania bąbelkowego Dane:n - liczba elementów zbioru, d[ ] – zbiór sortowany. Elementy zbioru mają indeksy od 1 do n. Wynik: Uporządkowany zbiór d[ ] Algorytm: porządkowanie bąbelkowe Krok 1. Dlaj = n - 1, n - 2, ..., 1: wykonuj K02...K04, zakończ algorytm Krok 2. p ← 1 Krok 3. Dlai = 1, 2, ..., j: jeśli d[i] > d[i + 1], to d[i] ↔ d[i + 1];  p ← 0 Krok 4. Jeślip = 1, to zakończ

  13. Algorytm sortowania bąbelkowego for(j = N - 1; j > 0; j--) { p = 1; for(i = 0; i < j; i++) { if(d[i] > d[i + 1]) { swap(d[i], d[i + 1]); p = 0; } } if(p) break; }

  14. Algorytm sortowania bąbelkowego • Wnioski: • - algorytm ten jest bardzo kosztownym algorytmem (klasa złożoności obliczeniowej – O(N2) • - bardzo prosta i zrozumiała struktura zapisu • dość często zdarzają się puste przebiegi (brak wykonania wymiany jeżeli elementu są uporządkowane)

  15. Rekurencja Rekurencja - jest modą programowania polegająca na wywoływaniu funkcji programu przez samą siebie . Przykład: long int silnia(int x) { if (x==0) { return 1; } else { return x * silnia(x-1); } }

  16. Szybkie sortowanie - quicksort Algorytm ten jak sama nazwa wskazuje, poprzez odpowiednią dekompozycję osiągnął znaczny zysk w szybkości porządkowania zbiorów. Metoda szybkiego sortowania podzielona została na dwie części: • część służąca do właściwego sortowania polegająca na wywoływaniu samej siebie • część odpowiadająca za rozdzielenie elementów tablicy wartości osiowej podziału

  17. Szybkie sortowanie - quicksort

  18. Szybkie sortowanie - quicksort Oznaczenia: left – lewy skrajny element right – prawy skrajny element p – wartość osiowa i – zmienna sterująca pętlą m – poszukiwany indeks komórki tablicy, w której umieszczamy element osiowy

  19. Szybkie sortowanie - quicksort void qsort(int* d, int left, int right) { if (left < right) { int m = left; for(int i = left+1; i <= right; i++) if (d[i] < d[left]) swap(d[++m],d[i]); swap(d[left], d[m]); qsort(d, left, m-1); qsort(d, m+1, right); } }

  20. Szybkie sortowanie - quicksort Wnioski: - dzięki zastosowaniu metody programowania „dziel i zwyciężaj” algorytm w optymalnie krótkim czasie realizuje zadanie porządkowania zbiory (klasa złożoności obliczeniowej – O(N log N)

More Related