T0616 ALGORITMA DAN PEMROGRAMAN (21-22) UNIVERSITAS BINA NUSANTARA

Download Report

Transcript T0616 ALGORITMA DAN PEMROGRAMAN (21-22) UNIVERSITAS BINA NUSANTARA

T0616
ALGORITMA DAN PEMROGRAMAN
(21-22)
SUBANDIJO
UNIVERSITAS BINA NUSANTARA
FAKULTAS ILMU KOMPUTER
JAKARTA, 2005
6/28/2016
T0616 - Algoritma dan Pemrograman
1
SORT
• TUJUAN SORT
• TIPE SORT
• METODE SORT
6/28/2016
T0616 - Algoritma dan Pemrograman
2
TUJUAN SORT
• MEMPERCEPAT PENCARIAN ELEMEN TARGET
DALAM SUATU LIST.
6/28/2016
T0616 - Algoritma dan Pemrograman
3
TIPE SORT
• ASCENDING: PENGURUTAN DARI NILAI
TERKECIL MENUJU NILAI TERBESAR.
1, 2, 3, 4, 5, 6, 7, 8, 9, 10.
• DESCENDING: PENGURUTAN DARI NILAI
TERBESAR MENUJU NILAI TERKECIL.
10, 9, 8, 7, 6, 5, 4, 3, 2, 1.
6/28/2016
T0616 - Algoritma dan Pemrograman
4
METODE SORT
• SEDERHANA
SELECTION, BUBBLE, INSERTION
• LANJUT
QUICK, MERGE
6/28/2016
T0616 - Algoritma dan Pemrograman
5
SELECTION SORT
• ALGORITMA
• for (i=0; i<= n-2; i++)
for(j=1; j <= n-1; j++)
tentukan indeks nilai data terkecil antara a[j] s/d
a[n-1] dan simpan di variabel k. kemudian tukar
a[j] dan a[k].
6/28/2016
T0616 - Algoritma dan Pemrograman
6
SELECTION SORT
519
69
69
69
69
419
419
127
127
127
127
127
419
381
391
69
519
519
519
419
381
381
381
419
519
6/28/2016
T0616 - Algoritma dan Pemrograman
7
SELECTION SORT
#define maxInt 32767
void cariMin(int *a, int mulai, int
akhir, int *k) {
int min, i;
min = maxInt;
for(i=mulai; i<=akhir; i++) {
if(a[i]<min) {
min = a[i];
*k = i;
}
}
}
6/28/2016
void tukar(int *x, int *y) {
int z;
z = *x;
*x = *y;
*y = z;
}
T0616 - Algoritma dan Pemrograman
8
SELECTION SORT
void selection(int *a, int n) {
int i, k;
for(i=0; i<=n-2; i++) {
cariMin(a, i, n-1, &k);
tukar(&a[i], &a[k]);
}
}
6/28/2016
main() {
int dataA[] = {519, 419, 127,
69, 381);
int i;
for(i=0;i<5;i++)
print(“%d”,dataA[i]);
printf(“\n”);
selection(dataA,5);
for(i=0;i<5;i++)
print(“%d”,dataA[i]);
printf(“\n”);
}
T0616 - Algoritma dan Pemrograman
9
BUBBLE (EXCHANGE) SORT
519
519
519
519
69
419
419
419
69
519
127
127
69
419
419
69
69
127
127
127
381
381
381
381
318
6/28/2016
T0616 - Algoritma dan Pemrograman
10
BUBBLE (EXCHANGE) SORT
69
69
69
69
519
519
519
127
419
419
27
519
127
127
419
419
381
381
381
318
6/28/2016
T0616 - Algoritma dan Pemrograman
11
BUBBLE (EXCHANGE) SORT
69
69
69
127
127
127
519
519
381
419
381
519
381
419
419
6/28/2016
T0616 - Algoritma dan Pemrograman
12
BUBBLE (EXCHANGE) SORT
69
69
69
127
127
127
381
381
381
519
419
419
419
519
519
6/28/2016
T0616 - Algoritma dan Pemrograman
13
BUBBLE (EXCHANGE) SORT
void bubble(int *a, int n) {
int i, j;
for(i=1; i<n; i++)
for(j=n-1; j>= i; j--)
if(a[j-1] > a[j])
tukar(&a[j-1],&a[j]);
PROSEDUR BERLAKU
‘BODOH’ YAITU TETAP
MELAKUKAN
PERBANDINGAN
MESKIPUN DATA
TELAH URUT.
}
6/28/2016
T0616 - Algoritma dan Pemrograman
14
BUBBLE FLAG SORT
void bubbleFlag(int *a, int n) {
}
i = i+1;
int i = 1, j;
int urut = 0;
//FLAG
}
}
while((i<n)&&(!urut)) {
urut = 1;
for(j=n-1; j>= i; j--){
if(a[j-1] > a[j]) {
tukar(&a[j-1], &a[j]);
urut = 0;
URUT VARIABEL
BOOLEAN DENGAN
NILAI 0 ATAU 1. JIKA
URUT = 1, ARTINYA
TELAH URUT, MAKA
STOP PROSES.
}
6/28/2016
T0616 - Algoritma dan Pemrograman
15
INSERTION SORT
ALGORITMA
for (i=1; i<n; i++) {
x = a[i] sisipkan x pada posisi yang tepat antara a[0]
s/d a[i-1] agar data tetap urut.
}
6/28/2016
T0616 - Algoritma dan Pemrograman
16
INSERTION SORT
void insertion(int *a, int n ) {
int i, j, k;
for(k=1; k < n; k++) {
y= a[k];
for(i=k-1; i>=0 && y<a[i]; i--) a[i+1] = a[i];
a[i+1] = y;
}
}
6/28/2016
T0616 - Algoritma dan Pemrograman
17
INSERTION SORT
519
419
127
69
69
419
519
419
127
127
127
127
519
419
381
69
69
69
519
419
381
381
381
381
519
6/28/2016
T0616 - Algoritma dan Pemrograman
18
BUBBLE VS BUBBLE WITH FLAG
• DIKETAHUI SEKUEN DATA SBB:
–
–
–
–
11, 22, 33, 44, 55
55, 44, 33, 22, 11
22, 11, 33, 44, 55
11, 22, 33, 55, 44
• DATA AKAN DI SORT MENGGUNAKAN METODE
BUBBLE DAN BUBBLE WITH SORT. BANDINGKAN
BANYAK PUTARAN DI ANTARA KEDUA METODE.
6/28/2016
T0616 - Algoritma dan Pemrograman
19
ALGORITMA QUICK SORT
ALGORITMA
void quickSort(int *a, int kiri, int kanan) {
if(kiri<kanan) {
atur elemen-elemen a[kiri], …, a[kanan] sehingga
menghasilkan urutan baru sbb:
a[kiri], …, a[j-1] < a[j],
a[j] di posisi tersortir,
a[j+1], …, a[kanan] > a[j]
quickSort(a, kiri, j-1);
quickSort(a, j+1, kanan);
}
}
6/28/2016
T0616 - Algoritma dan Pemrograman
20
QUICK SORT EXAMPLE
(1)
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
73
79
76
72
75
78
71
77
74 QS(0,8)
j=1
k=6
TUKAR
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
73
71
76
72
75
78
79
77
74
j=2
k=3
TUKAR
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
73
71
72
76
75
78
79
77
74
k=2
j=3
TUKAR
6/28/2016
T0616 - Algoritma dan Pemrograman
21
QUICK SORT EXAMPLE
(2)
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
72
71
73
76
75
78
79
77
74
k=1
QS(0,1)
j=2
TUKAR
A[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8] QS(0,0)
71
72
73
76
75
78
79
77
74
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
71
72
73
76
75
78
79
77
74
j=5
QS(2,1)
QS(3,8)
k=8
TUKAR
6/28/2016
T0616 - Algoritma dan Pemrograman
22
QUICK SORT EXAMPLE
(3)
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
72
71
73
76
75
74
79
77
78
k=5
j=6
TUKAR
A[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8] QS(3,4)
71
72
73
74
75
76
79
77
78
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
71
72
73
74
75
76
79
77
78
QS(3,2)
QS(4,4)
QS(6,8)
k=8 j=?
TUKAR
6/28/2016
T0616 - Algoritma dan Pemrograman
23
QUICK SORT EXAMPLE
(4)
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
71
72
73
74
75
76
78
77
79
k=7
TUKAR
QS(6,7)
j=8
A[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
71
72
73
74
75
76
77
78
79
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8] QS(8.7)
71
72
73
74
75
76
77
78
79
6/28/2016
T0616 - Algoritma dan Pemrograman
QS(6,6)
QS(9,8)
24
SKEMA PEMANGGILAN QS
SECARA REKURSIF
QS(0,8)
QS(0,1)
QS(0,0)
QS(3,8)
QS(2,1)
QS(3,4)
QS(3,2)
QS(6,8)
QS(4,4)
QS(6,6)
6/28/2016
T0616 - Algoritma dan Pemrograman
QS(6,7)
QS(9,8)
QS(8,7)
25
IMPLEMENTASI ALGORITMA QS
void quickSort(int *a, int L,int R) {
int j,k;
if(L < R){
j = L; k = R + 1;
do{
do{ j = j+1;} while(a[j] < a[L]);
do{ k = k-1;} while(a[k] > a[L]);
if(j < k) tukar(&a[j], &a[k]);
} while(j < = k);
tukar(&a[L], &a[k]);
quickSort(a, L, k-1);
quickSort(a, k+1, R);
}
}
6/28/2016
T0616 - Algoritma dan Pemrograman
26
MERGE SORT
(1)
• NATURAL MERGE ANTARA LIST L1 DAN L2
TERJADI JIKA DATA DI L1 DAN L2 KEDUANYA
TELAH URUT.
L1:
L2:
09
10
14
12
16
19
18
40
24
52
30
77
• LIST L3 MERUPAKAN HASIL MERGE ANTARA LIST
L1 DAN LIST L2
L3:
6/28/2016
09 10 12 14 16 18 19 24 30 40 52 77
T0616 - Algoritma dan Pemrograman
27
MERGE SORT
(2)
• RUN ADALAH BAGIAN DARI LIST DI MANA DATA
TELAH URUT.
• LIST X ADALAH SBB:
34 36 23 12 16 18 24 10
• LIST X AWALNYA MEMUAT 8 RUN YAITU
RUN1:
RUN2:
RUN3:
RUN4:
6/28/2016
34
36
23
12
RUN5:
RUN6:
RUN7:
RUN8:
16
18
24
10
T0616 - Algoritma dan Pemrograman
28
MERGE SORT
(3)
• LAKUKAN MERGE UNTUK SETIAP RUN PADA
LIST X (RUN1 DENGAN RUN2, RUN3 DENGAN
RUN4, RUN5 DENGAN RUN6, RUN7 DENGAN
RUN8) DAN SIMPAN DI LIST R.
R: 34 36 * 12 23 * 16 18 * 10 24
• SEKARANG LIST R TERDIRI DARI 4 RUN YANG
MASING-MASING SUDAH URUT YAITU:
RUN1: 34 36
RUN2: 12 23
6/28/2016
RUN3: 16 18
RUN4: 10 24
T0616 - Algoritma dan Pemrograman
29
MERGE SORT
(4)
• COPY LIST R KE LIST X DAN LAKUKAN MERGE
UNTUK SETIAP RUN PADA LIST X (RUN1
DENGAN RUN2, RUN3 DENGAN RUN4) DAN
SIMPAN DI LIST R.
R: 12 23 34 36 * 10 16 18 24
• SEKARANG LIST R TERDIRI DARI 2 RUN YANG
MASING-MASING SUDAH URUT YAITU:
RUN1: 12 23 34 36
RUN2: 10 16 18 24
6/28/2016
T0616 - Algoritma dan Pemrograman
30
MERGE SORT
(5)
• COPY LIST R KE LIST X DAN LAKUKAN MERGE
UNTUK SETIAP RUN PADA LIST X (RUN1
DENGAN RUN2) DAN SIMPAN DI LIST R.
R: 10 12 16 18
23 24 34 36
• SEKARANG LIST R TERDIRI DARI 1 RUN YANG
SUDAH URUT. SELANJUTNYA COPY LIST R KE
LIST X.
6/28/2016
T0616 - Algoritma dan Pemrograman
31
MERGE SORT
(6)
• 34 36 23 12 16 18 24 10
• 34 36 12 23 16 18 10 24
• 12 23 34 36 10 16 18 24
• 10 12 16 18 23 24 34 36
6/28/2016
T0616 - Algoritma dan Pemrograman
32
IMPLEMENTASI MERGE SORT
(1)
void mergesort(int *X, int n)
{
int *R, i, j, k, l1, l2, size, u1, u2;
R = (int*)malloc(n*sizeof(int));
size = 1;
while(size < n){
l1=0; k=0;
while(l1+size < n){
l2 = l1 + size;
u1 = l2 - 1;
u2 = (l2+size-1 < n) ? l2+size-1 : n-1;
6/28/2016
T0616 - Algoritma dan Pemrograman
33
IMPLEMENTASI MERGE SORT
(2)
for(i=l1, j=l2; i<=u1 && j<=u2; k++){
if(X[i] <= X[j]) R[k] = X[i++];
else R[k]=X[j++];
}
for(; i <= u1; k++) R[k] = X[i++];
for(; j <= u2; k++) R[k] = X[j++];
l1 = u2+1;
}
for(i=l1;k < n; i++) R[k++] = X[i];
for(i=0; I < n; i++) X[i]=R[i];
size *= 2;
}
free( R );
}
6/28/2016
T0616 - Algoritma dan Pemrograman
34
THE END
“...ALL YOU NEED IS LOVE…”
6/28/2016
T0616 - Algoritma dan Pemrograman
35