PROGRAMIRANJEAmir Hajdar
Teme
Sortiranje“Bubble Sort”“Merge Sort”
2
Sortiranje
Sortiranje je proces koji sortira niz po određenom kriteriju (od najmanjeg ka najvećem, od najvećeg ka najmanjem, parne i neparne, itd.)
512354277 101
1 2 3 4 5 6
5 12 35 42 77 101
1 2 3 4 5 6
“Bubble Sort”
Algoritam:Krećući se od početka prema kraju, “Bubble”najveći element na kraj poredeći sve elemente u nizu i vršeći “swap” ako se veći element nalazi kao prethodnik u poređenju.
512354277 101
1 2 3 4 5 6
“Bubble Sort”
512354277 101
1 2 3 4 5 6
Swap42 77
“Bubble Sort”
512357742 101
1 2 3 4 5 6Swap35 77
“Bubble Sort”
512773542 101
1 2 3 4 5 6Swap12 77
“Bubble Sort”
577123542 101
1 2 3 4 5 6
Nema potrebe za “swap”
“Bubble Sort”
577123542 101
1 2 3 4 5 6Swap5 101
“Bubble Sort”
77123542 5
1 2 3 4 5 6
101
Najveći element ispravno postavljen
“Bubble Sort” algoritam// n je velicina niza
int index = 1;
int zadnja_poz = n – 1;
while(index <= zadnja_poz) {
if(A[index] > A[index + 1]) {
Swap(A, index);
}
index++;
}
“Swap” metoda
public static void Swap(int A[ ], int i){int temp = A[i];A[i] = A[i+1];A[i+1] = temp;
}
Bubble Sortiranje
Jedino je sad najveći element na pravoj pozicijiSvi ostali elementi nisu poredaniZnači, trebamo ponoviti proces
77123542 5
1 2 3 4 5 6
101
“Bubbling” sve elemente
77123542 51 2 3 4 5 6
101
5421235 771 2 3 4 5 6
101
4253512 771 2 3 4 5 6
101
4235512 771 2 3 4 5 6
101
4235125 771 2 3 4 5 6
101
N -
1
Kako smanjiti broj poređenja?
12354277 1011 2 3 4 5 6
5
77123542 51 2 3 4 5 6
101
5421235 771 2 3 4 5 6
101
4253512 771 2 3 4 5 6
101
4235512 771 2 3 4 5 6
101
Kako smanjiti broj poređenja?
Samo 1 put moramo napraviti (n-1) poređenjaNpr.:
4253512 771 2 3 4 5 6
101
// n - velicina nizapublic final static int n = 8;
public static void Swap(int A[],int i){int temp = A[i];A[i] = A[i+1];A[i+1] = temp;
}
“Bubble Sort” code
public static void Bubblesort(int A[n]) {
int za_uraditi, index;
za_uraditi = n – 1;
while(za_uraditi > 0 ) {
index = 1;
while (index <= za_uraditi) {
if(A[index] > A[index + 1]) {
Swap(A, index);
}
index++;
}
za_uraditi --;
}
} // Bubblesort
Unu
traš
nja
petlj
a
Vanj
ska
petlj
a
“Bubble Sort” code
Problemi sa “Buble sort”-iranjem
Šta ako je niz već sortiran?Šta ako je niz već nakon par “swap”-ova sortiran?Rezultat: Potrebno je da ovakve situacije detektujemo na vrijeme i spriječimo ih!
4235125 771 2 3 4 5 6
101
Koristiti Boolean varijablu
Možemo koristiti boolean varijablu da detektujemo da li je poziv na metodu “Swap” izvršen.Ako “Swap” nije izvršen, znači da je niz većsortiran!VAŽNO: Ova varijabla mora biti resetovana nakon provjere čitavog niza
“Bubble Sort” (sa boolean varijablom)
public static void BubbleSort( int A[N] ) {
int to_do, index;
to_do = N – 1;
boolean did_swap = true;
while((to_do > 0) && did_swap) {
index = 1;
did_swap = false;
while (index <= to_do) {
if(A[index] > A[index + 1]) {
Swap(A,index);
did_swap = true;
}
index++;
}
to_do --;
}
} // BubbleSort
Upotreba {…}je obavezna jer su 2 komande
povezane
Primjer
674523 14 6 3398 42
1 2 3 4 5 6 7 8
to_do
index
7
N 8 did_swap true
Primjer
674523 14 6 3398 42
1 2 3 4 5 6 7 8
to_do
index
7
1
N 8 did_swap false
Primjer
674523 14 6 3398 42
1 2 3 4 5 6 7 8
to_do
index
7
1
N 8
Swap
did_swap false
Primjer
674598 14 6 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
1
N 8
Swap
did_swap true
Primjer
674598 14 6 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
2
N 8 did_swap true
Primjer
674598 14 6 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
2
N 8
Swap
did_swap true
Primjer
679845 14 6 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
2
N 8
Swap
did_swap true
Primjer
679845 14 6 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
3
N 8 did_swap true
Primjer
679845 14 6 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
3
N 8
Swap
did_swap true
Primjer
671445 98 6 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
3
N 8
Swap
did_swap true
Primjer
671445 98 6 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
4
N 8 did_swap true
Primjer
671445 98 6 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
4
N 8
Swap
did_swap true
Primjer
671445 6 98 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
4
N 8
Swap
did_swap true
Primjer
671445 6 98 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
5
N 8 did_swap true
Primjer
671445 6 98 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
5
N 8
Swap
did_swap true
Primjer
981445 6 67 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
5
N 8
Swap
did_swap true
Primjer
981445 6 67 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
6
N 8 did_swap true
Primjer
981445 6 67 3323 42
1 2 3 4 5 6 7 8
to_do
index
7
6
N 8
Swap
did_swap true
Primjer
331445 6 67 9823 42
1 2 3 4 5 6 7 8
to_do
index
7
6
N 8
Swap
did_swap true
Primjer
331445 6 67 9823 42
1 2 3 4 5 6 7 8
to_do
index
7
7
N 8 did_swap true
Primjer
331445 6 67 9823 42
1 2 3 4 5 6 7 8
to_do
index
7
7
N 8
Swap
did_swap true
Primjer
331445 6 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
7
7
N 8
Swap
did_swap true
Poslije 1.-og izvršenja vanjske petlje
331445 6 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
7
8
N 8 did_swap true
“Bubble sort” 2. izvršenje
331445 6 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
1
N 8 did_swap false
“Bubble sort” 2. izvršenje
331445 6 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
1
N 8 did_swap false
No Swap
“Bubble sort” 2. izvršenje
331445 6 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
2
N 8 did_swap false
“Bubble sort” 2. izvršenje
331445 6 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
2
N 8 did_swap false
Swap
“Bubble sort” 2. izvršenje
334514 6 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
2
N 8 did_swap true
Swap
“Bubble sort” 2. izvršenje
334514 6 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
3
N 8 did_swap true
“Bubble sort” 2. izvršenje
334514 6 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
3
N 8 did_swap true
Swap
“Bubble sort” 2. izvršenje
33614 45 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
3
N 8 did_swap true
Swap
“Bubble sort” 2. izvršenje
33614 45 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
4
N 8 did_swap true
“Bubble sort” 2. izvršenje
33614 45 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
4
N 8 did_swap true
No Swap
“Bubble sort” 2. izvršenje
33614 45 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
5
N 8 did_swap true
“Bubble sort” 2. izvršenje
33614 45 67 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
5
N 8 did_swap true
Swap
“Bubble sort” 2. izvršenje
67614 45 33 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
5
N 8 did_swap true
Swap
“Bubble sort” 2. izvršenje
67614 45 33 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
6
N 8 did_swap true
“Bubble sort” 2. izvršenje
67614 45 33 4223 98
1 2 3 4 5 6 7 8
to_do
index
6
6
N 8 did_swap true
Swap
“Bubble sort” 2. izvršenje
42614 45 33 6723 98
1 2 3 4 5 6 7 8
to_do
index
6
6
N 8 did_swap true
Swap
Poslije 2.-og izvršenja vanjske petlje
42614 45 33 6723 98
1 2 3 4 5 6 7 8
to_do
index
6
7
N 8 did_swap true
“Bubble sort” 3. izvršenje
42614 45 33 6723 98
1 2 3 4 5 6 7 8
to_do
index
5
1
N 8 did_swap false
“Bubble sort” 3. izvršenje
42614 45 33 6723 98
1 2 3 4 5 6 7 8
to_do
index
5
1
N 8 did_swap false
Swap
“Bubble sort” 3. izvršenje
42623 45 33 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
1
N 8 did_swap true
Swap
“Bubble sort” 3. izvršenje
42623 45 33 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
2
N 8 did_swap true
“Bubble sort” 3. izvršenje
42623 45 33 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
2
N 8 did_swap true
Swap
“Bubble sort” 3. izvršenje
42236 45 33 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
2
N 8 did_swap true
Swap
“Bubble sort” 3. izvršenje
42236 45 33 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
3
N 8 did_swap true
“Bubble sort” 3. izvršenje
42236 45 33 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
3
N 8 did_swap true
No Swap
“Bubble sort” 3. izvršenje
42236 45 33 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
4
N 8 did_swap true
“Bubble sort” 3. izvršenje
42236 45 33 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
4
N 8 did_swap true
Swap
“Bubble sort” 3. izvršenje
42236 33 45 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
4
N 8 did_swap true
Swap
“Bubble sort” 3. izvršenje
42236 33 45 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
5
N 8 did_swap true
“Bubble sort” 3. izvršenje
42236 33 45 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
5
N 8 did_swap true
Swap
“Bubble sort” 3. izvršenje
45236 33 42 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
5
N 8 did_swap true
Swap
Poslije 3.-eg izvršenja vanjske petlje
45236 33 42 6714 98
1 2 3 4 5 6 7 8
to_do
index
5
6
N 8 did_swap true
“Bubble sort” 4. izvršenje
45236 33 42 6714 98
1 2 3 4 5 6 7 8
to_do
index
4
1
N 8 did_swap false
“Bubble sort” 4. izvršenje
45236 33 42 6714 98
1 2 3 4 5 6 7 8
to_do
index
4
1
N 8 did_swap false
Swap
“Bubble sort” 4. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
1
N 8 did_swap true
Swap
“Bubble sort” 4. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
2
N 8 did_swap true
“Bubble sort” 4. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
2
N 8 did_swap true
No Swap
“Bubble sort” 4. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
3
N 8 did_swap true
“Bubble sort” 4. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
3
N 8 did_swap true
No Swap
“Bubble sort” 4. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
4
N 8 did_swap true
“Bubble sort” 4. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
4
N 8 did_swap true
No Swap
Poslije 4.-og izvršenja vanjske petlje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
4
5
N 8 did_swap true
“Bubble sort” 5. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
1
N 8 did_swap false
“Bubble sort” 5. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
1
N 8 did_swap false
No Swap
“Bubble sort” 5. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
2
N 8 did_swap false
“Bubble sort” 5. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
2
N 8 did_swap false
No Swap
“Bubble sort” 5. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
3
N 8 did_swap false
“Bubble sort” 5. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
3
N 8 did_swap false
No Swap
“Bubble sort” 5. izvršenje
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
4
N 8 did_swap false
Završeno ranije!
452314 33 42 676 98
1 2 3 4 5 6 7 8
to_do
index
3
4
N 8 did_swap false
S obzirom da nismo napravili nijedan“swap”, nema potrebe dalje provjeravati jer niz mora biti sortiran!
“Divide and Conquer” i merge sortiranje
“Divide and Conquer” polovi problem u 2 dijela i zatim rješava svaki dio posebno:
Nastavi dijeliti problem na 2 dijela dok problem ne postane trivijalanRiješi trivijalne dijeloveSastavi trivijalne dijelove
“Merge” sortiranje prati ovaj algoritam
Algoritam
Mergesort(Passed an array)if array_size > 1
Divide array in halfCall Mergesort on first half.Call Mergesort on second half.Merge two halves.
Merge(Passed two arrays)Compare leading element in each arraySelect lower and place in new array.
(If one input array is empty then placeremainder of other array in output array)
674523 14 6 3398 42 674523 14 6 3398 42
674523 14 6 3398 42
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398
Merge
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398
23
Merge
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398
23 98
Merge
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
23 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
Merge
23 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
14
Merge
23 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
45
Merge
23 98 14
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
Merge
98 451423
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
Merge
98 14
14
23 45
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
Merge
23 14
14 23
98 45
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
Merge
23 98 4514
14 23 45
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
Merge
23 98 4514
14 23 45 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
23 98 4514
14 23 45 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676
23 98 4514
14 23 45 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676
Merge
23 98 4514
14 23 45 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676
6
Merge
23 98 4514
14 23 45 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676
67
Merge
23 98 4514 6
14 23 45 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
23 98 4514 676
14 23 45 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 676
14 23 45 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
3323 98 4514 676
14 23 45 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
4223 98 4514 676 33
14 23 45 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 676 4233
14 23 45 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 6 4233
14 23 45 98 6
67
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 6 33
14 23 45 98 6 33
67 42
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 6 4233
14 23 45 98 6 33 42
67
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 676 4233
14 23 45 98 6 33 42 67
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 676 4233
23 45 98 33 42 6714 6
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 676 4233
23 45 98 6 42 67
6
14 33
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 676 4233
14 45 98 6 42 67
6 14
23 33
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 676 4233
14 23 98 6 42 67
6 14 23
45 33
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 676 4233
14 23 98 6 33 67
6 14 23 33
45 42
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 676 4233
14 23 98 6 33 42
6 14 23 33 42
45 67
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 676 4233
14 23 45 6 33 42
6 14 23 33 42 45
98 67
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 676 4233
14 23 45 98 6 33 42 67
6 14 23 33 42 45 67
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
Merge
23 98 4514 676 4233
14 23 45 98 6 33 42 67
6 14 23 33 42 45 67 98
674523 14 6 3398 42
674523 14 6 3398 42
4523 1498
2398 45 14
676 33 42
676 33 42
23 98 4514 676 4233
14 23 45 98 6 33 42 67
6 14 23 33 42 45 67 98
674523 14 6 3398 42
6 14 23 33 42 45 67 98