• Nie Znaleziono Wyników

Algorytmy_poszukiwania_i_porzadkowania_elementy_jezyka_programowania - prezentacja 2

N/A
N/A
Protected

Academic year: 2021

Share "Algorytmy_poszukiwania_i_porzadkowania_elementy_jezyka_programowania - prezentacja 2"

Copied!
20
0
0

Pełen tekst

(1)

Algorytmy sortowania

i przeszukiwania

(2)

Spis treści

1.

Sortowanie przez wstawianie - InsertSort

2.

Sortowanie przez wybór – SelectionSort

3.

Algorytm sortowania bąbelkowego

4.

Rekurencja

(3)

Sortowanie przez wstawianie - InsertSort

3

4

7

6

8

1

Karty posortowane

Karty do posortowania

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.

(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 – 1 wykonaj 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

(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

(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 4 7 2 9 3 4 7 2 9 3 2 7 4 9 3 2 7 4 9 3 2 3 4 9 7 2 3 4 9 7 2 3 4 9 7 2 3 4 9 7 2 3 4 7 9 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. Dla j = 1, 2, ..., n - 1: wykonuj Krok 1 ...Krok 4, a następnie zakończ algorytm

Krok 2. pmin ← j

Krok 3. Dla i = j + 1, j + 2, ..., n: jeśli d[i] < d[pmin], to pmin ← i

(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

(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.

40 2 2 2 2 2 2 2 40 4 4 4 4 4 39 4 40 6 6 6 6 6 39 6 40 18 18 18 18 6 39 18 40 20 20 4 18 18 39 20 40 39 20 20 20 20 39 39 40 Indeks tablicy Etapy

(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. Dla j = n - 1, n - 2, ..., 1: wykonuj K02...K04, zakończ algorytm

Krok 2. p ← 1

Krok 3. Dla i = 1, 2, ..., j: jeśli d[i] > d[i + 1], to d[i] ↔ d[i + 1]; p ← 0

(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

P

(17)

Szybkie sortowanie - quicksort

29 40 2 1 6 18 20 32 23 34 39 41 29 2 1 6 18 20 23 40 32 34 39 41 2 1 6 18 20 23 40 32 34 39 41

(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

Cytaty

Powiązane dokumenty

Sytuacja komplikuje się już w przypadku jednej warstwy sprężystej o spągu na pewnej skończonej głębokości H, gdy poniżej H jest podłoże nieodkształcalne: oprócz

Założenie: najefektywniejsze rozwiązanie stosu za pomocą tablicy – szczyt stosu to ostatni element wstawiony tablicy począwszy od miejsca o indeksie 0 (jeśli liczba elementów

Znaleźć wzór analityczny na ξ.... Znaleźć wzór analityczny

dimming pełne podświetlenie LED ze strefowym wygaszaniem gdzie za ekranem umieszczona jest cała ściana diod, które mogą być strefowo wygaszane w pewnych miejscach ekranu

Jeśli chcemy tam mieć przeciwne współczynnik to rozszerzamy, oba równania tak aby otrzymać przy x współczynnik 30 i -30 (najmniejsza wspólna wielokrotność dla 5 i 6, tak

Kiedy w jednej i tej samej osobie, lub w jednym i tym samym ciele, władza prawodawcza zespolona jest z wykonawczą, nie ma wolności; ponieważ można się lękać, aby ten sam monarcha

Metoda podstawiania polega na odgadnięciu oszacowania, a następnie wykazaniu, że jest ono trafne..

Realizacji projektu towarzyszy raport, czyli dokument podsumowujący pracę zespołów zadaniowych, który za- wiera: tytuł projektu, nazwiska i imiona członków zespołu,