BAB VI SORTIR ATAU PENGURUTAN SORTIR TERHADAP RECORD File adalah Himpunan record, misalkan suatu perusahaan mempunyai file yang berisi seluruh data yang diperlukan oleh perusahaan itu tentang para pegawainya. Data dari masing masing pegawai disebut record. Jadi, setiap orang pegawai mempunyai satu record. Record adalah himpunan elemen yang bersifat heterogen, maksud heterogen adalah bahwa elemen dari suatu record boleh mempunyai tipe data yang berlainan. Elemen dari record disebut field. Suatu record biasanya mengandung field penunjuk yang digunakan sebagai kunci untuk memanggil record tersebut. Field ini biasa disebut sebagai key dari suatu record. Dalam suatu file, key inilah yang biasanya ingin kita urutkan dari key kecil ke key besar (urut menaik / ascending) ataupun sebaliknya (urut menurun / descending). Cara penyusunan inilah yang disebut sebagai sortir. Sortir terhadap file adalah suatu proses pengurutan sekumpulan record, sedemikian sehingga : KEY(I) <= KEY (J) Untuk setiap I < J (dlm urut ascending) KEY(I) >= KEY (J) Untuk setiap I < J (dlm urut descending) Disini KEY(I) adalah harga KEY dari record ke i Secara umum, sortir dapat dilakukan terhadap suatu himpunan bilangan ataupun terhadap himpunan string ataupun himpunan lain yang bersifat ordinal. 40
Ada kategori sortir berdasarkan media yang digunakan :. Sortir Internal Metode ini dipakai jika himpunan data yang akan disortir adalah kecil,sehingga proses sortir tidak membutuhkan tempat yang besar di memori utama komputer.. Sortir Eksternal Metode ini baik untuk dipakai jika himpunan data yang akan disortir cukup besar. Disini kita membutuhkan media atau alat tambahan, seperti magnetik tape, Disket dsb. Kita dapat melakukan beberapa operasi pada record. Kita bisa menyisipkan (insert) sebuah key, kita juga dapat menghapus (delete) sebuah key dan kita dapat pula menukar posisi dari dua buah key. Pada waktu kita melakukan penyisipan, penghapusan ataupun penukaran posisi dari dua buah key, selain field key yang berubah, field lain yang terdapat pada record tersebut juga akan berubah. METODE SORTIR GABUNG (MERGESORT) Misalkan kita mempunyai 000 record yang akan disortir, namun hanya 000 record yang dapat disimpan dalam memori utama. Masalah ini akan diselesaikan dengan metode sortir gabung, yaitu dengan memisahkan menjadi kelompok yang berdiri sendiri. Yakni : Record sampai dengan 000 dan 00 sampai dengan 000. Hasil penerapan dari sortir Internal terhadap masing masing kelompok akan membentuk dua buah sublist terurut, kemudian kedua sublist tersebut kita gabung (merge), menghasilkan file terurut yang kita inginkan. Sublist ( 000) Merge t Hasil - 000 Sublist (00 000) Gambar 6 : Sortir Gabung 4
Ada beberapa jenis sortir gabung yaitu :. Sortir Gabung Natural (Natural Merge) Merupakan metode pengurutan gabung dgn hanya ada output saja Misalkan kita menggunakan buah tape untuk memisahkan data, hasilnya tetap ditampung dalam tape.. Sortir Gabung Setimbang (Balanced Merge) Merupakan metode pengurutan gabung yang tergantung pada jumlah input filenya. [-way Balanced Merge] bila inputnya file, outputnya file juga. [-way Balanced Merge] bila inputnya file, outputnya file juga. maka, secara umum : [n-way Balanced Merge] bila inputnya n file, outputnya n file juga. Co 6- : Misalkan file yang terdiri atas 6000 record dibagi menjadi buah subfile yang masing masing terdiri dari 500 record. Jika digunakan natural merge maka kita memerlukan buah tape, buah untuk menampung file input dan sebuah untuk menampung file output. Tape T : 500-00 400 4500 00 500 00 500 00 500-500 Tape T 0 6000 450 5000 50 4000 50 000 50 000 50 000 Merge P : 000 P : 00 000 P5 : 400 5000 P : 00 000 P4 : 00 4000 P6 : 500 6000 Selanjutnya : P : 000 P : 00-000 P : 00 000 Disalin Ke tape
P : 000 P : 00 000 P : 00 000 P4 : 00 4000 P5 : 400 5000 P6 : 500 6000 Merge P + P4 P + P5 P + P6 Selanjutnya : P + P4 Disalin Ke tape P + P4 P : 00 000 P : 00 000 Merge P + P4 + P + P5 P + P6 (tape ) P + P5 P5 : 400 5000 P6 : 500 6000 P + P4 + P + P5 P : 00 000 P : 00 000 Merge 4 6000 P + P6 P5 : 400 5000 P6 : 500 6000 Gambar 6- : Gambaran Skematik Natural Merge Catatan : yang dimaksud dengan P + P4 adalah merge antara P dengan P4 Co 6- : Misalkan file yang terdiri atas 6000 record dibagi menjadi Subfile yang masing masing terdiri dari 500 record. Menggunakan balanced merge kita memerlukan 4 buah tape, buah tape T dan T untuk menampung file Input dan buah file T dan T4 untuk menampung file output. 4
Tape T : 500-00 400 4500 00 500 00 500 00 500-500 Tape T 0 6000 450 5000 50 4000 50 000 50 000 50 000 Merge 4 000 00 000 400 5000 4 00 000 00 4000 500 6000 000 00 000 400 5000 00 000 00 4000 500 6000 4 Merge 000 400 6000 00 4000 000 00 000 400 5000 00 4000 00 4000 500 6000 Merge 4000 (400 6000 di Tape) 4000 00 000 400 5000 Merge 6000 400 6000 00 4000 500 6000 Gambar 6- : Gambaran Skematik Balanced Merge
Dua hal yang mempengaruhi kecepatan algoritma sortir adalah jumlah operasi perbandingan yang dilakukan dan jumlah operasi pemindahan data dilakukan. Berlainan dengan proses pencarian data, pada proses sortir data juga harus diperhatikan jmlah pemindahan data atau data movement yang dilakukan. Hal ini penting karena pada proses sortir, isi daftar sebagai input akan berubah menjadi output daftar yang sudah terurut. Oleh karena itu banyak proses pemindahan data yang dilakukan jelas akan mempengaruhi kecepatan algoritma. Pada garis besarnya ada tiga teknik utama yang dapat dilakukan dalam melakukan sortir yaitu :. Sortir penyisipan / Insertion sort. Sortir pemilihan / Selection sort. Sortir Penukaran / Exchange sort TEKNIK SORTIR PENYISIPAN Teknik ini sangat sederhana dan paling mudah untuk dimengerti maupun diterapkan. Prinsip dasar dari teknik ini adalah secara berulang ulang memasukkan setiap data ke tempatnya yang benar. Cara ini biasanya digunakan oleh para pemain kartu pada saat mereka sedang menyusun kartu. Untuk dapat memasukkan x ke dalam tempat yang sebenarnya, maka harus dilakukan perbandingan dan pemindahan secara bergantian. Jadi x akan bergeser ke kiri dengan membandingkan nilai x dengan nilai a[j] sebelumnya dan kemudian x disisipkan ke dalam nilai tempatnya atau a[j] dipindahkan ke kanan. Hal ini diteruskan untuk unsur di sebelah kiri a[j]. Proses ini akan berhenti bila salah satu dari kedua hal berikut ini berlaku :. salah satu unsur a[j] mempunyai key yang lebih kecil dari x. bagian ujung kiri daftar telah tercapai Untuk dapat melakukan pengecekan dengan mudah, kita tambahkan suatu unsur tambahan disebelah ujung kiri yakni a[0] dan beri nilai x. Co 6- : Urutkan 8 bilangan berikut ini : 8 6 45
kita mulai dengan i = i = kita bandingkan elemen ke, yakni dengan elemen pertama, karena > tidak dilakukan pemindahan. 8 6 disini a[] dan a[] sudah terurut i = kita bandingkan elemen ke yakni dengan elemen ke,. tukarkan posisi mereka sehingga a[] =, a[] =. Lalu perbandingkan dengan, pertukarkan lagi. 8 6 disini a[], a[] dan a[] sudah terurut i = 4 kita bandingkan elemen ke 4, yakni dengan elemen ke yakni tukarkan posisi mereka, sehingga a[] =, a[4] =. Lalu perbandingkan dengan, pertukarkan lagi. Selanjutnya antara dengan tidak kita lakukan pertukaran, sehingga 8 6 Disini a[],, a[4] sudah terurut dan seterusnya : i = 5 8 6 i = 6 8 6 i = 8 6 i = 8 8 6 Jadi pada setiap langkah ke i, subdaftar a[],, a[i] sudah terurut 46
Kompleksitas algoritma sortir penyisipan. Bila C dan M berturut turut menunjukkan jumlah operasi perbandingan dan jumlah pemindahan data, maka tabel berikut menunjukkan nilai C dan M untuk algoritma sortir penyisipan. Kompleksitas algoritma C M Hal terbaik (Best Case) Rata Rata (Average Case) Hal Terburuk (Worst Case) n (n +n-4)/4 (n +n)/- (n-) (n +n-8)/4 (n +n-4)/ Keadaan yang terbaik terjadi bila pada awalnya sudah terurut dari kecil ke besar. Dalam hal ini, pemindahan data hanya dalam bentuk penyimpanan nilai x ke dalam a[i] dan a[j+]. Sedang keadaan yang terburuk terjadi bila data pada saat awal mempunyai urutan terbalik dari besar ke kecil. Teknik ini memenuhi persyaratan stabil dari suatu algoritma sort, yakni bahwa urutan dari data dengan nilai key yang sama tidak pernah berubah. TEKNIK SORTIR PEMILIHAN Algoritma sortir pemilihan atau selection sort bekerja berdasarkan prinsip berikut ini :. Pilih data dengan key terkecil. Tukarkan data tersebut dengan elemen a[] Kemudian ulangi hal tersebut dengan n- data yang ada kecuali a[]. Lalu dengan n- data kecuali a[] dan a[] dan seterusnya. Co 6-4 : Urutkan data berikut : 8 6 Setelah langkah pertama, data sudah menempati tempatnya dengan benar, yakni : 8 6 4
Setelah langkah kedua, dan sudah menempati tempatnya dengan benar, yakni : 8 6 Setelah langkah ketiga, data, dan 8 sudah menempati tempatnya yang benar. Proses ini diteruskan sampai dengan langkah ke i-, sehingga diperoleh berturut turut : 8 6 8 6 8 6 8 6 8 6 Perbedaan utama antara sortir penyisipan dan sortir pemilihan adalah sebagai berikut: pada sortir penyisipan, pada setiap langkah hanya diperhatikan satu data saja, kemudian untuk mencari tempat data diletakkan, dilihat semua data yang akan menjadi tujuan. Sebaliknya pada selection sort, pada tiap langkah dipilih data dari semua barisan data, kemudian diletakkan sebagai satu data baru pada sub daftar tujuan. Khusus untuk teknik ini, jumlah perbandingan yang dilakukan tidak tergantung dari susunan data awal yang ada. Jadi untuk keadaan terbaik, terburuk maupun rata rata jumlah operasi perbandingan adalah sama yakni : C = n ( n ) / Sedangkan untuk pemindahan, ada tiga kemungkinan : Kemungkinan terbaik (best case) M = (n-) Rata rata (average case) M = O(n Log n) Kemungkinan terburuk (worst case) M = trunc(n/4) + (n-) 48
TEKNIK SORTIR PENUKARAN Algoritma yang termasuk di dalam kelas ini mempunyai ciri khusus, yakni dengan membandingkan dan apabila urutan data tidak terpenuhi, diadakan penukaran seperti halnya algoritma pada selection sort maka pada tiap iterasi, data dengan key terkecil dalam sisa daftar akan bergerak ke bagian kiri dari sisa daftar tersebut. Algoritma yang paling sederhana dan termasuk dalam kelas ini adalah sortir gelembung atau bubble sort. Sekalipun tidak termasuk jenis sortir yang cepat, sortir inijuga bukan sortir yang paling lambat. Co 6 5 : Sebelum disortir 9 Setelah disortir 9 Selanjutnya, demi kemudahan sebutan, letak dari kiri ke kana, kita namakan saja sebagai letak pertama, letak kedua, sampai letak keenam. Letak itu memiliki lambang (), () sampai (6). Sortir gelembung menyelesaikan penyortirannya secara letak demi letak serta dimulai dengan letak pertama. Asal dasar dari sortir gelembung ini adalah membandingkan bilangan di antara dua letak. Misalkan kita membandingkan bilangan di antara letak () dan letak (5). Dengan azas ini, sortir gelembung membandingkan bilangan di antara berbagai letak serta bila perlu memindahkan bilangan di antara letak itu. Berdasarkan azas itu, coba kita lihat kerja sortir gelembung secara langkah demi langkah. Letak pertama Karena sortir gelembung menyelesaikan penyortirannya letak demi letak dan dimulai dari letak pertama, maka pada letak pertama kita tandai dengan indeks I =. 49
Pada langkah pertama ini, letak pertama kita bandingkan dengan posisi pertama (J = ) kemudian dengan posisi ke (J = ) dan seterusnya. Jika pada posisi > nilai datanya lebih kecil dari data posisi = maka terjadi pemindahan data dengan menukar posisi. Semua langkah ini menimbulkan satu hal. Bilangan terkecil dari kelompok bilangan itu akan berpindah ke letak pertama. Dengan kata lain, kini letak pertama memiliki bilangan terkecil. Dengan demikian, pada langkah selanjutnya letak pertama dapat ditinggalkan. Letak kedua Letak pertama yang sudah memiliki bilangan terkecil, tidak lagi diusik. Kegiatan sekarang adalah mencari bilangan yang kedua terkecil untuk diletakkan diletak kedua ini. Mula mula kita membandingkan letak kedua (I = ) dengan posisi kedua (J = ), setelah itu, kita membandingkan letak kedua dengan letak ke tiga dan seterusnya sampai kita memperoleh data dengan nilai terkecil ke dua. Jika data telah diketemukan maka letak tersebut kita pertukarkan. Dengan rampungnya penyortiran letak kedua, maka kita telah memperoleh bilangan kedua terkecil pada kelompok bilangan tersebut. Karena letak pertama dan kedua sudah memperoleh bilangan terkecil pertama dan kedua maka letak pertama dan kedua dapat diabaikan untuk letak yang berikutnya. Cara tersebut berlaku juga untuk letak ke tiga, ke empat dan seterusnya. 50
Co 6 6 : Letak Pertama I = J = J = J = J = 4 J = 5 J = 6 9 9 9 Letak ke dua I = J = J = J = 4 J = 5 J = 6 9 9 9 5
Letak ke tiga I = J = J = 4 J = 5 J = 6 9 9 9 Letak Ke empat I = 4 9 J = 4 J = 5 J = 6 9 Letak ke Lima I = 5 J = 5 J = 6 9 9 5
Versi lain Sortir Gelembung Selain algoritma bubble sort diatas, kita dapat pula melaksanakan sortir gelembung versi lain. Pada algoritma bubble sort tersebut pada setiap iterasi diperiksa dua data yang bersebelahan. Bila urutan tidak terpenuhi, kedua data tersebut saling bertukar tempat. Pada akhir setiap iterasi, data terkecil yang ada pada sisa daftar telah bergeser ke bagian sebelah kiri dari daftar. Co 6 : Data Awal i = i = i = 4 i = 5 i = 6 i = i = 8 8 6 8 6 8 6 8 6 8 6 8 6 8 6 8 6 Pada contoh ini terlihat bahwa i =, maka data sudah benar letaknya. Pada i =, maka data dan sudah benar. Demikian seterusnya pada iterasi ke i, data a[] sampai i- sudah benar letaknya. Jadi data yang harus diperhatikan hanya data ke i dsampai dengan n. disini juga terlihat bagaimana unsur yang terkecil pada suatu iterasi akan timbul ke permukaan (bubble Up). Kompleksitas algoritma sortir Gelembung Jumlah perbandingan untuk algoritma bubblesort adalah sama untuk setiap kemungkinan, yakni : C = n (n ) / Sedangkan jumlah perpindahan data yang diperlukan adalah : Keadaan terbaik (best case) M = 0 Rata rata (average case) M = n(n )/4 Keadaan terburuk (worst case) M = n(n )/4 5
Lat 6 :. Sebuah perusahaan pengepakan barang memiliki 8000 data yang akan diurutkan secara descending. a. Urutkan dengan metode eksternal (natural merge) dengan jumlah partisi = 8 b. Urutkan dengan metode eksternal (balanced merge) dengan jumlah partisi = 8. Urutkan data berikut : 9 5 8 8 Gunakan Metode : a. Sortir penyisipan / Insertion sort b. Sortir pemilihan / Selection sort c. Sortir Penukaran / Exchange sort Kemudian hitunglah kompleksitas algoritmanya! 54