Pengurutan (Sorting) Algoritma Pemrograman mas.anto72@gmail.com 1 Definisi Sorting /pengurutan proses mengatur sekumpulan obyek menurut urutan atau susunan tertentu. Bentuk susunan/urutan : Ascending menaik/membesar Descending menurun/mengecil Data yang diurut dapat berupa numerik atau tipe bentukan. Jika tipe bentukan harus berupa field. 2 1
Pengelompokan Pengurutan Dikelompokkan dalam 2 kelompok : 1. Pengurutan internal pengurutan sekumpulan data yang disimpan didalam memori utama komputer. 2. Pengurutan eksternal pengurutan data yang ada dalam memori sekunder dan biasanya volumenya besar. Pengurutan internal mempunyai performansi yang baik cepat, tapi boros memori. 3 Macam Algoritma Pengurutan Macam-macam algoritma sorting : 1. Maximum Sort 2. Insertion Sort 3. Bubble Sort 4. Heap Sort 5. Shell Sort 6. Quick Sort 7. Merge Sort 8. Radix Sort 9. Tree Sort 4 2
Tiga Algoritma Sorting Algoritma yang akan dibahas adalah : 1. Pengurutan Gelembung (Bubble Sort) 2. Pengurutan Pemilihan (Selection Sort 1. Minimum Sort 2. Maksimum Sort 3. Pengurutan Sisip (Insertion Sort) 5 Bubble Sort (1) Terinspirasi oleh gelembung sabun yang ada diatas permukaan. Gelembung mengapung karena massa-nya lebih kecil dari air itu sendiri. Prinsipnya : mengapungkan elemen array berharga paling kecil diapungkan artinya diangkat ke atas (ke ujung kiri array). 6 3
Bubble Sort (2) Tahapan Pengurutan Bubble Sort Ascending 1. Langkah 1 : Mulai elemen K=N, N-1,, 2 bandingkan L[K] dengan L[K-1]. Jika L[K]<L[K-1], tukar L[K] dengan L[K-1]. Maka L[1] berisi harga minimum pertama. 2. Langkah 2 : Mulai elemen K=N, N-1,, 3 bandingkan L[K] dengan L[K-1]. Jika L[K]<L[K-1], tukar L[K] dengan L[K-1]. Maka L[1..2] berisi nilai terurut. 3. Langkah 3 : Mulai dari elemen K=N, N-1,, 4 bandingkan L[K] dengan L[K-1]. Jika L[K]<L[K-1], tukar L[K] dengan L[K-1]. Maka L[1..3] berisi harga terurut. 4. 5. Langkah N-1 : Mulai dari K=N, bandingkan L[K] dengan L[K-1]. Jika L[K]<L[K-1], tukar L[K] dengan L[K-1]. Maka L[1] berisi harga terurut. 7 Array dengan N=6 belum terurut Bubble Sort (3) Ilustrasi : 25 27 10 8 76 21 Langkah 1 : K=N=6 21 76 K=5 8 21 76 K=4 8 10 21 76 K=3 8 27 10 21 76 K=2 8 25 27 10 21 76 Langkah 2 : K=N=6 21 76 K=5 10 21 76 K=4 10 27 21 76 K=3 8 10 25 27 21 76 Langkah 3 : K=N=6 21 76 K=5 21 27 76 K=4 8 10 21 25 27 76 Langkah 4 : K=N=6 27 76 K=5 8 10 21 25 27 76 Langkah 5 : K=N=6 8 10 21 25 27 76 8 4
Bubble Sort (4) Algoritma Bubble Sort Ascending : Procedure BubbleSortAsc(input/output L : Larik; input N : integer) Deklarasi I : integer {jumlah langkah} K : integer { pengapungan tiap langkah} Temp : integer { untuk penukaran nilai} Tukar : boolean { kontrol} Algoritma I = 1 Tukar = True While I < N 1 AND Tukar Do Tukar = False For K=N downto I+1 do If L[K] < L[K-1] then Temp = L[K] L[K] = L[K-1] L[K-1] = Temp Endif EndFor I=I+1 EndWhile 9 Bubble Sort (4) Procedure BubbleSortDesc(input/output L : Larik; input N : integer) Deklarasi I : integer {jumlah langkah} K : integer { pengapungan tiap langkah} Temp : integer { untuk penukaran nilai} Algoritma For I=1 to N-1 do For K=N downto I+1 do If L[K] > L[K-1] then Temp = L[K] L[K] = L[K-1] L[K-1] = Temp Endif EndFor EndFor 10 5
Selection Sort Selection sort terdiri dari : 1. Maximum Sort 2. Minimum Sort 11 Maximum Sort (1) Algoritma Maximum Sort Ascending Langkah 1 : Tentukan harga maksimum didalam L[1..N]. Tukar harga maksimum dengan elemen L[N] Langkah 2 : Tentukan harga maksimum didalam L[1..N-1]. Tukar harga maksimum dengan elemen L[N-1] Langkah 3 : Tentukan harga maksimum didalam L[1..N-2]. Tukar harga maksimum dengan elemen L[N-2].. Langkah N : Tentukan harga maksimum didalam L[1..2]. Tukar harga maksimum dengan elemen L[2] 12 6
Ilustrasi : Maximum Sort (2) 25 27 10 8 76 21 Langkah 1 : Cari elemen maksimum dalam L[1..6], maks = 76. Tukar Maks dengan L[N] menjadi : 25 27 10 8 21 76 Langkah 2: Cari elemen maksimum dalam L[1..5], maks = 27. Tukar Maks dengan L[5] menjadi : 25 21 10 8 27 76 Langkah 3: Cari elemen maksimum dalam L[1..4], maks = 25. Tukar Maks dengan L[4] menjadi : 8 21 10 25 27 76 Langkah 4: Cari elemen maksimum dalam L[1..3], maks = 21 Tukar Maks dengan L[3] menjadi : 8 10 21 25 27 76 Langkah 5: Cari elemen maksimum dalam L[1..2], maks = 10 Tukar Maks dengan L[2] menjadi : 8 10 21 25 27 76 13 Maximum Sort (3) Algoritma Maksimum Sort Ascending Procedure MaksSortAsc(input/output L : Larik; input N : integer) Deklarasi I : integer {jumlah langkah} J : integer { mencari nilai maks} U : integer { indeks ujung kiri } Maks : integer { nilai maks sementara } Imaks : Integer { indeks maks sementara } Temp : integer { untuk penukaran nilai} Algoritma U = N For I=1 to N-1 do Imaks = 1 For J=2 to U do If L[J] > L[Imaks] then Imaks=J Endif Endfor Temp=L[U] L[U]=L[Imaks] L[Imaks]= Temp U=U-1 Endfor 14 7
Maximum Sort (4) Algoritma Maximum Sort Descending Langkah 1 : Tentukan harga minimum didalam L[1..N]. Tukar harga maksimum dengan elemen L[1] Langkah 2 : Tentukan harga minimum didalam L[2..N]. Tukar harga maksimum dengan elemen L[2] Langkah 3 : Tentukan harga maksimum didalam L[3..N]. Tukar harga maksimum dengan elemen L[3].. Langkah N : Tentukan harga maksimum didalam L[N-1,N]. Tukar harga maksimum dengan elemen L[N-1] 15 Minimum Sort (1) Prinsipnya sama dengan maksimum sort hanya, sebagai dasar adalah nilai minimum. Algoritma Minimum Sort Ascending mencari nilai minimum dalam sebuah array, taruh hasilnya pada elemen pertama (kiri), dan seterusnya. Algoritma Minimum Sort Descending mencari nilai minimum dalam sebuah array, taruh hasilnya pada elemen terakhir (kanan), dan seterusnya. 16 8
Minimum Sort (2) Procedure MinSortAsc(input/output L : Larik; input N : integer) Deklarasi I : integer {jumlah langkah} J : integer { mencari nilai min} U : integer { indeks ujung kiri } Min : integer { nilai maks sementara } Imin : Integer { indeks maks sementara } Temp : integer { untuk penukaran nilai} Algoritma U = N For I=1 to N-1 do Imin = 1 For J=2 to U do If L[J] <L[Iin] then Imin=J Endif Endfor Temp=L[U] L[U]=L[Imin] L[Imin]= Temp U=U-1 Endfor 17 Insertion Sort (1) Menyisipkan elemen larik pada posisi yang tepat dan dilakukan secara beruntun dalam larik. Setelah menemukan posisi yang tepat, maka akan dilakukan proses pergeseran elemen yang ada. 18 9
Insertion Sort (2) Mekanisme Pengurutan : Langkah 1 : Anggap L[1] sudah pada posisi yang tepat. Langkah 2 : L[2] harus dicari posisi yang tepat antara L[1..2] dengan cara menggeser elemen. Langkah 3 : L[3] harus dicari posisi yang tepat antara L[1..3] dengan cara menggeser elemen.. Langkah N: L[N] harus dicari posisi yang tepat antara L[1..N] dengan cara menggeser elemen. 19 Insertion Sort (3) Ilustrasi Insertion Sort Ascending 25 27 10 8 76 21 Anggap L[1] sudah terurut 25 27 10 8 76 21 Langkah 2 : Cari posisi yang tepat untuk L[2] pada L[1..2] maka : 25 27 10 8 76 21 Langkah 4 : Cari posisi yang tepat untuk L[4] pada L[1..4] maka : 8 10 25 27 76 21 Langkah 5 : Cari posisi yang tepat untuk L[5] pada L[1..5] maka : 8 10 25 27 76 21 Langkah 3 : Cari posisi yang tepat untuk L[3] pada L[1..3] maka : 10 25 27 8 76 21 Langkah 6 : Cari posisi yang tepat untuk L[6] pada L[1..6] maka : 8 10 21 25 27 76 20 10
Insertion Sort (3) Ascending Procedure InsertSortAsc(input/output L : Larik; input N : integer) Deklarasi K : integer {jumlah langkah} J : integer { penelusuran array } Temp : integer { untuk penukaran nilai} Algoritma For K=2 to N do Temp = L[K] J=K-1 While Temp < L[J] AND J > 1 do L[J+1] = L[J] J=J-1 EndWhile If Temp > L[J] then L[J+1] = Temp Else L[J+1] = L[J] L[J] = Temp Endif Endfor 21 Insertion Sort (4) Descending Procedure InsertSortDesc(input/output L : Larik; input N : integer) Deklarasi K : integer {jumlah langkah} J : integer { penelusuran array } Temp : integer { untuk penukaran nilai} Algoritma For K=2 to N do Temp = L[K] J=K-1 While Temp >L[J] AND J > 1 do L[J+1] = L[J] J=J-1 EndWhile If Temp < L[J] then L[J+1] = Temp Else L[J+1] = L[J] L[J] = Temp Endif Endfor 22 11
Latihan Perhatikan array dibawah ini : Soal : 45 12-1 0 4 5-2 14 17 3 7 8 9 10 Tuliskan langkah proses pengurutan dengan metode algoritma : a) Buble Sort Descending b) Minimum Sort Ascending c) Insertion Sort Descending 23 Tugas Kelompok Terjemahkan algoritma-algoritma pengurutan berikut ini ke dalam bahasa pemrograman Pascal atau C atau Visual Basic atau Java : Binnary Search Bubble Sort Ascending Maksimum Sort Ascending Insertion Sort Descending Program harus disertai dengan penjelasannya dan siap dieksekusi serta tanpa error. Hasilnya diupload paling lambat tanggal 26 Juni 2010 melalui esinaukoe. 24 12