Algorytmy poszukiwania i porzadkowania elementy jezyka programowania prezentacja 2

background image

Algorytmy sortowania

i przeszukiwania

background image

Spis treści

1.

Sortowanie przez wstawianie - InsertSort

2.

Sortowanie przez wybór – SelectionSort

3.

Algorytm sortowania bąbelkowego

4.

Rekurencja

5.

Szybkie sortowanie - quicksort

background image

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.

background image

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];  ij + 1

Krok 3.

Dopóki ( in )  ∧  ( x > d[i] ): wykonuj d[i - 1] ← d[i]; 

ii + 1

Krok 4

d[i - 1] ← x

background image

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;
}

background image

Sortowanie przez wstawianie -
InsertSort

Wnioski:

- algorytm ten jest bardzo kosztownym algorytmem

(klasa złożoności obliczeniowej – O(N

2

)

- nie nadaje się do porządkowania dużych zbiorów

- postać algorytmu przejrzysta

- algorytm krótki

background image

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

background image

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.

p

min

j

Krok 3.

Dla i = j + 1,  j + 2, ..., n: jeśli d[i] < d[p

min

], to p

min

i

Krok 4.

d[j] ↔ d[p

min

]

background image

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]);
}

background image

Sortowanie przez wybór - SelectionSort

Wnioski:

- algorytm ten jest bardzo kosztownym algorytmem

(klasa złożoności obliczeniowej – O(N

2

)

- 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

background image

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

background image

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.

p1

Krok 3.

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

p ← 0

Krok 4.

Jeśli p = 1, to zakończ

background image

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;
}

background image

Algorytm sortowania bąbelkowego

Wnioski:

- algorytm ten jest bardzo kosztownym algorytmem

(klasa złożoności obliczeniowej – O(N

2

)

- bardzo prosta i zrozumiała struktura zapisu

- dość często zdarzają się puste przebiegi (brak
wykonania wymiany jeżeli elementu są
uporządkowane)

background image

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);
}
}

background image

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

< P

P

>= P

background image

Szybkie sortowanie - quicksort

2
9

4
0

2

1

6

1
8

2
0

3
2

2
3

3
4

3
9

4
1

29

2

1

6

1

8

2

0

2

3

4

0

3

2

3

4

3

9

4

1

2

1

6

1
8

2
0

2
3

40

3
2

3
4

3
9

41

background image

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

background image

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);
}
}

background image

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)


Document Outline


Wyszukiwarka

Podobne podstrony:
Algorytmy poszukiwania i porzadkowania elementy jezyka programowania prezentacja 3
Algorytmy poszukiwania i porządkowania Elementy języka programowania
Algorytmy poszukiwania i porządkowania Elementy języka programowania
algorytmy poszukiwania i porzadkowania elementy jezyka programowania
5 Wprowadzenie do języka C# i środowiska programistycznego (prezentacja)
piasecki,podstawy programowania, Podstawowe elementy języka java
ISTOTNE ELEMENTY CYWILIZACJI A GLOBALIZACJA prezentacja
Metody układania algorytmów rekurencja, metoda dziel i zwyciężaj, programowanie dynamiczne, metoda
elementy jezyka filmu
Elementy indywidualnego programu resocjalizacji i jego zadania
CLAB 6-1 2008-2009, Tematy ćwiczeń laboratoryjnych z Języka Programowania
Pomoc społeczna, służby społeczne, praca socjalna program prezentacji 2014 15
CLAB 1-1 2008-2009, Tematy ćwiczeń laboratoryjnych z Języka Programowania
CLAB 1-2 2008-2009, Tematy ćwiczeń laboratoryjnych z Języka Programowania
CLAB 2 2009-2010, Tematy ćwiczeń laboratoryjnych z Języka Programowania
Elementy języka naukowego, Marian Niezgoda
Algorytm poszukiwania ukladow w Nieznany

więcej podobnych podstron