ALGORITMA PENGURUTAN (SORTING) STT Wastukancana Purwakarta Algoritma dan Pemrograman II Pengurutan (sorting) adalah proses mengatur sekumpulan objek menurut urutan atau susunan tertentu. Baik urut menaik (ascending) atau urut menurun (descending) Data yang terurut memiliki beberapa keuntungan. Selain mempercepat waktu pencarian, dari data yang terurut kita dapat langsung memperoleh nilai maksimum dan minimum. Untuk data numerik terurut menurun, nilai maksimum adalah elemen pertama larik, dan nilai minimum adalah elemen terakhir larik. Adanya kebutuhan terhadap proses pengurutan memunculkan bermacam-macam algoritma pengurutan. Dilihat dari tempat penyimpanan data, sort dibedakan antara external sort dan internal sort. External sort bila datanya berada pada media external, atau external storage, seperti hardisk. Internal sort bila datanya ada dalam internal storage atau memory komputer. Salah satunya data yang berada dalam suatu array satu dimensi. Beberapa metode internal sort: Bubble sort Selection sort Insertion sort Shell sort Merge sort Radix sort Quick sort Heap sort
Memanipulasi isi array satu dimensi 1 2 3 4 5 6 Bagaimana caranya memanipulasi Array A agar: elemen yang disebelah kiri diisi dengan isi elemen yang disebelah kanan seperti dibawah ini: A 12 17 10 5 25 7 15 1 2 3 4 5 6 A 17 10 5 25 7 15 Sebelum menggunakan algoritma-algoritma tersebut ada beberapa latihan yang perlu dipelajari sebelum mempelajari sort diatas. Yaitu bagaimana memanipulasi data dalam array satu dimensi.
1 2 3 4 5 6 JAWAB A 12 17 10 5 25 7 15 Isi Awal Array A Algoritma dengan WHILE i = 0; while ( i < 6 ) { A[ i ] = A [ i+1 ]; i++; } 1 17 10 5 25 7 15 Setelah A [0] = A [1] 2 17 10 5 25 7 15 Setelah A [1] = A [2] 3 17 10 5 25 7 15 Setelah A [2] = A [3] Algoritma dengan FOR for ( i=0; i<6 ; i++) A[ i ] = A [ i+1 ]; 4 17 10 5 25 7 15 Setelah A [3] = A [4] 5 17 10 5 25 7 15 Setelah A [4] = A [5] 6 17 10 5 25 7 15 Setelah A [5] = A [6] 1 2 3 4 5 6 A 17 10 5 25 7 15 Isi Terakhir Array A
Bagaimana caranya kalo memanipulasi Array A agar: elemen yang di sebelah kanan diisi dengan isi elemen yang di sebelah kiri 1 2 3 4 5 6 A 12 17 10 5 25 7 15 Isi Awal Array A 1 12 10 5 25 7 15 Setelah A [1] = A [0] 2 12 5 25 7 15 Setelah A [2] = A [1] JAWAB Algoritma dengan WHILE 3 12 25 7 15 Setelah A [3] = A [2] i = 0; while ( i < 6 ){ A[ i+1 ] = A [ i ]; i++; } 4 12 7 15 Setelah A [4] = A [3] 5 12 15 Setelah A [5] = A [4] Algoritma dengan FOR for (i=0; i<6; i++) A[ i+1 ] = A [ i ]; 6 12 Setelah A [6] = A [5] 1 2 3 4 5 6 A 12 Isi Terakhir Array A
1 2 3 4 5 6 Gambarkan kembali isi array A dengan algoritma dibawah ini A 12 17 10 5 25 7 15 Isi Awal Array A i= 0 ( A[0] > A[1] )? False Tidak mengisi A[ 1 ] for (i=0; i<6; i++){ if (A[ i ] > A [ i+1 ] ) A[ i+1 ] = A[ i ]; } 1 12 17 10 5 25 7 15 i = 1 ( A[1] > A[2] )? True A[ 2 ] = A[ 1 ] 2 12 17 5 25 7 15 i = 3 ( A[2] > A[3] )? True A[ 2 ] = A[ 3 ] 3 12 17 25 7 15 i = 3 ( A[3] > A[4] )? False Tidak Mengisi A[ 4 ] 4 12 17 25 7 15 i= 4 ( A[4] > A[5] )? True A[ 5] = A[ 4 ] 5 12 17 25 15 i = 5 ( A[5] > A[6] )? True A[ 6 ] = A[ 5 ] A 12 17 25
1 2 3 4 5 6 Gambarkan kembali isi array A dengan algoritma dibawah ini A 12 17 10 5 25 7 15 Isi Awal Array A i = 0 ( A[0] > A[2] )? False Tidak tukar for(i=0; i<6; i++){ if (A[ i ] > A [ i+1 ] ){ X = A[ i ]; A[ i ] = A[ i+1 ]; A[ i+1 ] = X; } 1 12 17 10 5 25 7 15 i = 1 ( A[1] > A[2] )? True tukar A[ 1 ] & A[ 2 ] 2 12 10 17 5 25 7 15 i = 2 ( A[2] > A[3] )? True tukar A[ 2 ] & A[ 3 ] 3 12 10 5 17 25 7 15 Menukar Isi elemen A [ i ] dengan elemen A [ i + 1 ] i = 3 ( A[3] > A[4] )? False Tidak tukar 4 12 10 5 17 25 7 15 i= 4 ( A[4] > A[5] )? True tukar A[ 4 ] & A[ 5] 5 12 10 5 17 7 25 15 Konsep ini yang Mendasari BUBBLE SORT i = 5 ( A[5] > A[6] )? True tukar A[ 5 ] & A[ 6 ] A 12 10 5 17 7 15 25
BUBBLE SORT ( Algoritma Pengurutan Apung ) Bubble artinya gelembung. Gelembung selalu mengapung keatas Proses Sorting dilakukan tahap per tahap Jika jumlah elemen suatu array adalah n maka akan dilakukan n-1 tahap Prinsip proses BUBBLE SORT adalah menempatkan (mengapungkan) nilai terbesar pada elemen ujung paling kanan pada setiap tahap (untuk hasil akhir array ascending) Algoritma pengurutan apung diinspirasi oleh gelembung sabun yang berada di atas permukaan air. Karena berat jenis gelembung sabun lebih ringan daripada berat jenis air, maka gelembung sabun selalu terapung ke atas permukaan. Secara umum, benda-benda yang berat akan terbenam dan benda-benda yang ringan akan terapung ke atas permukaan. Prinsip pengapungan tersebut digunakan pada pengurutan apung. Apabila kita menginginkan larik terurut menaik, maka elemen larik yang berharga paling kecil “diapungkan”, Artinya diangkat ke atas atau ke ujung kiri/kanan larik melalui proses pertukaran. Proses pengapungan ini dilakukan sebanyak n – 1 langkah. ( dalam buku rinaldi munir satu langkah disebut juga satu kali pass ) Dengan n adalah ukuran lariknya.
1 2 3 4 5 6 Data Awal: 15 10 7 22 17 5 12 Hasil pd Tahap-I: 22 Diproses kolom: 0-6, Nilai terbesar di kolom 6 Hasil pd Tahap-II: 17 22 Diproses kolom: 0-5, Nilai terbesar di kolom 5 Hasil pd Tahap-III: 15 17 22 Diproses kolom: 0-4, Nilai terbesar di kolom 4 Hasil pd Tahap-IV: 12 15 17 22 Diproses kolom: 0-3, Nilai terbesar di kolom 3 Hasil pd Tahap-V: 10 12 15 17 22 Diproses kolom: 0-2, Nilai terbesar di kolom 2 Hasil pd Tahap-VI: 5 7 10 12 15 17 22 Diproses kolom: 0-1, Nilai terbesar di kolom 1 Dan tentu saja sisa yang terkecil ada di kolom 0 Setelah melewati 6 tahap data akan menjadi terurut
const n = 7 for(k=0; k<n-1 ; k++){ for (i=0; i<n-k-1; i++ ) { } Maka akan dilakukan 6 kali looping Algoritma dalam kotak ini dilaksanakan sebanyak n-k-1 kali setiap kali mengerjakan satu tahap Perhatikan: Setiap tahap, nilai i berubah mulai dari 0 sampai dengan n-k-1
k = nomor tahap Untuk tahap-1, k=0 Proses tahap per tahap k=0; for(k=0; k<n-1 ; k++){ for (i=0; i<n-k-1; i++ ){ if (A[i] > A[i+1]){ X = A[ i ]; A[ i ] = A [ i + 1 ]; A [ i + 1 ] = X; } Proses dilakukan bukan semata- mata menempatkan nilai terbesar pada ujung paling kanan tapi dilakukan sebagai berikut: Bila isi A[0] > A[1] maka tukar Isi A[0] dengan A[1], Kemudian lanjutkan Bila isi A[1] > A[2] maka tukar isi A[1] dengan A[2], Dan seterusnya sampai A[n-1] Untuk n=7 dan tahap-1, Maka proses dilakukan 6 kali Menukar isi A [ i ] dengan A [ i + 1 ] Bila A[ i ] > A[ i +1 ] Untuk tahap selanjutnya k=1,2,3,4 dan terakhir = 5
True, tukar A[0] dengan A[1] TAHAP-I Keadaan Awal Nilai i if Proses A[0] > A[1] True, tukar A[0] dengan A[1] 1 A[1] > A[2] True, tukar A[1] dengan A[2] 2 A[2] > A[3] False, tidak ada penukaran 3 A[3] > A[4] True, tukar A[3] dengan A[4] 4 A[4] > A[5] True, tukar A[4] dengan A[5] 5 A[5] > A[6] True, tukar A[5] dengan A[6] 15 10 7 22 17 5 12 Tukar 10 15 7 22 17 5 12 Tukar 10 7 15 22 17 5 12 10 7 15 22 17 5 12 Tukar 10 7 15 17 22 5 12 Tukar 10 7 15 17 5 22 12 Tukar 10 7 15 17 5 12 22 Pada tahap berikutnya A[6] Tidak ikut diproses. 10 7 15 17 5 12 22
TAHAP-II Awal = hasil akhir tahap-I 10 7 15 17 5 12 22 TAHAP-II k=1 While ( i < 5) i=0 7 10 15 17 5 12 22 10 tukar dengan 7 i: 0 - 4 i=1 7 10 15 17 5 12 22 Tidak ada penukaran TAHAP-II Ada 3 kali pertukaran i=2 7 10 15 17 5 12 22 Tidak ada penukaran i=3 7 10 15 5 17 12 22 17 tukar dengan 5 i=4 7 10 15 5 12 17 22 17 tukar dengan 12 17 berada di ujung paling kanan Tahap-II
TAHAP-III Awal = hasil akhir tahap-II A[5] dan A[6] Tidak ikut diproses 7 10 15 5 12 17 22 TAHAP-III k= 2 While ( i < 4) i = 0-3 Tidak ada penukaran i=0 7 10 15 5 12 17 22 i=1 7 10 15 5 12 17 22 Tidak ada penukaran TAHAP-II Ada 2 kali pertukaran i=2 7 10 5 15 12 17 22 15 tukar dengan 5 i=3 7 10 5 12 15 17 22 15 tukar dengan 12 15 berada di ujung paling kanan Tahap-III
LATIHAN Urutkan array di bawah ini dengan algoritma bubble sort