PENGURUTAN (SORTING) 1 Algoritma dan Pemrograman Tahar Agastani Teknik Informatika UIN - 2008 Overview Definisi dan Tujuan Jenis Pengurutan Teknik Pengurutan Selection Sort Bubble Sort Kuliah Minggu ke 13 1
Definisi dan Tujuan Definisi umum: proses pengaturan kembali serangkaian objek dalam urutan tertentu Tujuan: untuk mempercepat pencarian suatu target dalam suatu daftar (list) Membaca data dari keyboard: Jenis Pengurutan Berdasar bentuk pengurutan: Ascending : Pengurutan dilakukan mulai dari nilai terkecil menuju nilai terbesar Descending: Pengurutan dilakukan mulai dari nilai terbesar menuju nilai terkecil Berdasar data yang akan diurutkan: Internal sorting: Pengurutan dilakukan terhadap array External sorting: Pengurutan dilakukan terhadap file sekuensial Kuliah Minggu ke 13 2
Teknik Pengurutan Sederhana: Selection Sort Bubble Sort Insertion Sort Lanjut: Quick Sort Merge Sort SELECTION SORT Ide dasar: Mencari nilai ekstrim (terbesar atau terkecil) dalam array dan menukarkannya dengan elemen terujung. Kuliah Minggu ke 13 3
Algoritma: for(i=0; i<=n-2;i++){ /* N=Banyak data dlm daftar */ for(j=i;j<=n-1;j++){ /* Tentukan index dari data terkecil antara A[j] s/d A[N-1], dan simpan di variabel k. Kemudian tukar A[i] dengan A[k]. */ Baca Data Data Pertama Tukarkan Data Terkecil Algoritma: for(i=0; i<=n-2;i++){ /* N=Banyak data dlm daftar */ for(j=i;j<=n-1;j++){ /* Tentukan index dari data terkecil antara A[j] s/d A[N-1], dan simpan di variabel k. Kemudian tukar A[i] dengan A[k]. */ Baca Data Data Pertama Tukarkan Data Terkecil Kuliah Minggu ke 13 4
Algoritma: for(i=0; i<=n-2;i++){ /* N=Banyak data dlm daftar */ for(j=i;j<=n-1;j++){ /* Tentukan index dari data terkecil antara A[j] s/d A[N-1], dan simpan di variabel k. Kemudian tukar A[i] dengan A[k]. */ Baca Data Data Pertama Tukarkan Data Terkecil Algoritma: for(i=0; i<=n-2;i++){ /* N=Banyak data dlm daftar */ for(j=i;j<=n-1;j++){ /* Tentukan index dari data terkecil antara A[j] s/d A[N-1], dan simpan di variabel k. Kemudian tukar A[i] dengan A[k]. */ Baca Data Data Pertama Tukarkan Data Terkecil Kuliah Minggu ke 13 5
Algoritma: for(i=0; i<=n-2;i++){ /* N=Banyak data dlm daftar */ for(j=i;j<=n-1;j++){ /* Tentukan index dari data terkecil antara A[j] s/d A[N-1], dan simpan di variabel k. Kemudian tukar A[i] dengan A[k]. */ Data Terakhir Berhenti /* Fungsi-fungsi pada Selection Sort */ #include <stdio.h> void Cari_Min(int *Arr, int mulai, int akhir,int *k) { unsigned int i; int min; min = Arr[mulai]; for (i=mulai; i<=akhir;i++){ if (Arr[i] < min){ min = Arr[i]; *k = i; void Tukar(int *x, int *y) { int z ; z = *x; *x = *y; *y = z; Kuliah Minggu ke 13 6
void Selection(int *Arr, int n) { int i,k; for(i=0;i<=n-2;i++){ Cari_Min(Arr,i,n-1,&k); Tukar(&Arr[i],&Arr[k]); /* Program Utama */ void main() { int DataArr[] = {,,,,; int i; for(i=0; i<5; i++) printf( %d,dataarr[i]); printf( \n ); Selection(DataArr,5); for(i=0; i<5; i++) printf( %d,dataarr[i]); printf( \n ); BUBBLE (EXCHANGE) SORT Ide dasar: Mengapungkan elemen yang nilainya kecil dengan pertukaran, sehingga array akan terurut membesar (ascending). Kuliah Minggu ke 13 7
Algoritma (Dengan Ilustrasi) Pola Pergerakan Elemen Pada Putaran Pertama Pola Pergerakan Elemen Pada Putaran Kedua Pola Pergerakan Elemen Pada Putaran Ketiga Putaran Keempat Terakhir Kuliah Minggu ke 13 8
Fungsi Bubble Sort void Bubble(int *DataArr, int n) { int i,j; for (i=1; i<n; i++) for (j=n-1; j>=i; j--) if (DataArr[j-1] > DataArr[j]) Tukar(&DataArr[j-1],&DataArr[j]); Bila data telah terurut, procedure diatas berlaku bodoh, yaitu tetap melakukan pembandingan. Perbaikan secara sederhana, yaitu menambah : flag yang memberitahu, bila pada suatu putaran data telah terurut. Fungsi Bubble Sort void Bubble_Flag(int *Arr, int n) { int i,j; int urut; /* Flag */ urut = 0; i = 1; while ((i < n) && (!urut)) { urut = 1; for (j=n-1; j>=i; j--) { if (Arr[j-1] > Arr[j]){ Tukar (&Arr[j-1], &Arr[j]); urut = 0; i = i + 1; Kuliah Minggu ke 13 9
Latihan 1. Modifikasi prosedur pengurutan dengan pemilihan (selection) untuk mengurutkan data sehingga terurut mengecil (descending). 2. Modifikasi prosedur pengurutan dengan teknik bubble untuk mengurutkan data sehingga terurut mengecil (descending). 3. Buat main program untuk memanggil fungsi Bubble_Flag diatas. Kuliah Minggu ke 13 10