SORTING (PENGURUTAN) 1. Tujuan Setelah mempelajari modul ini, mahasiswa diharapkan: a. Mampu menjelaskan mengenai algoritma Sorting b. Mampu membat dan mendeklarasikan struktural algoritma Sorting c. Mampu menerapkan dan mengimplementasikan algoritma Sorting 2. Dasar Teori Pengurutan data dalam struktur data sangat penting terutama untuk data yang bertipe data numerik ataupun karakter. Pengurutan dapat dilakukan secara ascending (urut naik) dan descending (urut turun). Pengurutan (Sorting) adalah proses pengurutan data yang sebelumnya disusun secara acak sehingga tersusun secara teratur menurut aturan tertentu. Contoh: Data Acak 3 9 6 21 10 1 13 Ascending 1 3 6 9 10 13 Descending 21 21 13 10 9 6 3 1 Deklarasi Array Sorting Mendeklarasikan array secara global: int data[100]; int n; //untuk jumlah data 1 FT – Jurusan TE – S1 PTI & S1 TI 2015 Fungsi Tukar 2 Buah Data: void tukar (int a, int b) { int tmp; tmp = data [a] ; data [a] = data [b] ; data [b] = tmp ; BUBBLE SORT Merupakan metode sorting termudah, diberi nama “Bubble” karena proses pengurutan secara berangsur-angsur bergerak/berpindah ke posisinya yang tepat, seperti gelembung yang keluar dari sebuah gelas bersoda. Bubble Sort mengurutkan data dengan cara membandingkan elemen sekarang dengan elemen berikutnya. Jika elemen sekarang lebih besar dari elemen berikutnya maka kedua elemen tersebut ditukar, jika pengurutan ascending. Jika elemen sekarang lebih kecil dari elemen berikutnya, maka kedua elemen tersebut ditukar, jika pengurutan descending. Algoritma ini seolah-olah 1 FT – Jurusan TE – S1 PTI & S1 TI 2015 Modul Praktikum Algoritma dan menggeser satu per satu elemen dari kanan ke kiri atau kiri ke kanan, tergantung jenis pengurutannya. Ketika satu proses telah selesai, maka bubble sort akan mengulangi proses, demikian seterusnya. Kapan berhentinya? Bubble sort berhenti jika seluruh array telah diperiksa dan tidak ada pertukaran lagi yang bisa dilakukan, serta tercapai perurutan yang telah diinginkan. Gambar 1. Proses ke-1 Algoritma Bubble Sort Pada gambar di atas, pengecekan dimulai dari data yang paling akhir, kemudian dibandingkan dengan data di depannya, jika data di depannya lebih besar maka akan ditukar. Gambar 2. Proses ke-2 Algoritma Bubble Sorting Pada proses ke-2, pengecekan dilakukan sampai dengan data ke-2 karena data pertama pasting sudah paling kecil. Modul Praktikum Algoritma dan 2 FT – Jurusan TE – S1 PTI & S1 TI 2015 Gambar 3. Proses ke-3 Algoritma Bubble Sorting Gambar 4. Proses ke-4 Algoritma Bubble Sorting Gambar 5. Proses ke-5 Algortima Bubble Sorting Sintaks program fungsi Bubble Sort void bubble sort () { for (int i = 1; i<n; i++) { for (int j = n-1; if (data [j] j>=1; j--) { < data [j-1]) tukar (j, j-1); // ascending } } Dengan prosedur di atas, data terurut naik (ascending), untuk urut turun (descending) silahkan ubah bagian: if (data [j] Menjadi: < data [j-1] ) if (data [j] > data [j-1]) tukar (j, j-1); Algoritma Bubble Sorting mudah dalam sintaks, tetapi lebih hemat dibandingkan dengan algoritma sorting yang lain. PROGRAM ALGORITMA BUBBLE SORT BAHASA C SOURCE CODE : #include <stdio.h> void bubbleSort(int arr[], int n){ int i, j, tmp; for(i = 0; i < n; i++){ for(j=0; j < n-i-1; j ++){ if(arr[j] > arr[j+1]){ tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } } int main() { int array[100], n, i, j; printf("Masukkan banyak elemen: "); scanf("%d", &n); printf("Masukkan nilai: \n"); for(i = 0; i < n; i++){ scanf("%d", &array[i]); } bubbleSort(array, n); printf("Hasil pengurutan sebagai berikut:\n"); for(i = 0; i < n; i++){ printf("%d ", array[i]); } printf("\n"); } Simpan source code dengan nama file bubblesort.c, tetapi sesuaikan aja dengan nama file yang dinginkan dan jangan lupa harus berektensi .c PENJELASAN : Penjelasan source algoritma bubble sort di bahasa C setiap barisnya : baris 3 : mendeklarasikan fungsi void bubbleSort dengan menerima inputan arr dan n yang bertipe integer. baris 4 : mendeklarasikan variable i dan j untuk perulangan dan tmp untuk variable penukaran sementara. baris 5-6 : melakukakan perulangan sebanyak n dan perulangan sebanyak nilai variable n dikurang i dan dikurang satu. baris 7-11 : cek kondisi jika nilai variable arr pada index ke j lebih besar dari nilai varible arr pada index ke j+1 maka melakukan penukaran nilai variable baris 17 : mendeklarasi variable array, n, i dan j bertipe integer. baris 18-19 : melakukan input nilai dari user untuk variable n yang digunakan sebagai jumlah data. baris 21-25 : melakukan input nilai dari user untuk variable array dari setiap data. baris 27 : memanggil fungsi bubbleSort dengan memasukkan variable array dan n. baris 29-33 : menampilkan hasil pengurutan bubbleSort. COMPILE & RUN : Untuk cara melakukan compile dan run source codenya sebagai berikut: $ gcc -o bubblesort bubblesort.c $ ./bubblesort berikut hasil screenshot dari compile dan run source codenya: Gambar Program Algoritma Bubble Sort di Bahasa C CONTOH INPUTAN Masukkan banyak elemen: 10 Masukkan nilai: 10 50 20 30 15 25 12 40 45 1 CONTOH KELUARAN : Hasil pengurutan sebagai berikut: 1 10 12 15 20 25 30 40 45 50 KESIMPULAN : Dari hasil program, source code algoritma bubble sort tersebut berhasil dapat dijalankan tanpa ada error dan menampilkan hasil pengurutan yang sesuai. berikut ada langkah-langkah proses pengurutan yang dilakukan program: PROSES SORTING ARRAY [10, 50, 20, 30, 15, 25, 12, 40, 45, 1] Putaran ke 1 : [10 50 20 30 15 25 12 40 45 1] Proses ke 1 [10 50 20 30 15 25 12 40 45 1] Proses ke 2 [10 20 50 30 15 25 12 40 45 1] Proses ke 3 [10 20 30 50 15 25 12 40 45 1] Proses ke 4 [10 20 30 15 50 25 12 40 45 1] Proses ke 5 [10 20 30 15 25 50 12 40 45 1] Proses ke 6 [10 20 30 15 25 12 50 40 45 1] Proses ke 7 [10 20 30 15 25 12 40 50 45 1] Proses ke 8 [10 20 30 15 25 12 40 45 50 1] Proses ke 9 [10 20 30 15 25 12 40 45 1 50] Putaran ke 2 : [10 20 30 15 25 12 40 45 1 50] Proses ke 1 [10 20 30 15 25 12 40 45 1 50] Proses ke 2 [10 20 30 15 25 12 40 45 1 50] Proses ke 3 [10 20 15 30 25 12 40 45 1 50] Proses ke 4 [10 20 15 25 30 12 40 45 1 50] Proses ke 5 [10 20 15 25 12 30 40 45 1 50] Proses ke 6 [10 20 15 25 12 30 40 45 1 50] Proses ke 7 [10 20 15 25 12 30 40 45 1 50] Proses ke 8 [10 20 15 25 12 30 40 1 45 50] Proses ke 9 [10 20 15 25 12 30 40 1 45 50] Putaran ke 3 : [10 20 15 25 12 30 40 1 45 50] Proses ke 1 [10 20 15 25 12 30 40 1 45 50] Proses ke 2 [10 15 20 25 12 30 40 1 45 50] Proses ke 3 [10 15 20 25 12 30 40 1 45 50] Proses ke 4 [10 15 20 12 25 30 40 1 45 50] Proses ke 5 [10 15 20 12 25 30 40 1 45 50] Proses ke 6 [10 15 20 12 25 30 40 1 45 50] Proses ke 7 [10 15 20 12 25 30 1 40 45 50] Proses ke 8 [10 15 20 12 25 30 1 40 45 50] Proses ke 9 [10 15 20 12 25 30 1 40 45 50] Putaran ke 4 : [10 15 20 12 25 30 1 40 45 50] Proses ke 1 [10 15 20 12 25 30 1 40 45 50] Proses ke 2 [10 15 20 12 25 30 1 40 45 50] Proses ke 3 [10 15 12 20 25 30 1 40 45 50] Proses ke 4 [10 15 12 20 25 30 1 40 45 50] Proses ke 5 [10 15 12 20 25 30 1 40 45 50] Proses ke 6 [10 15 12 20 25 1 30 40 45 50] Proses ke 7 [10 15 12 20 25 1 30 40 45 50] Proses ke 8 [10 15 12 20 25 1 30 40 45 50] Proses ke 9 [10 15 12 20 25 1 30 40 45 50] Putaran ke 5 : [10 15 12 20 25 1 30 40 45 50] Proses ke 1 [10 15 12 20 25 1 30 40 45 50] Proses ke 2 [10 12 15 20 25 1 30 40 45 50] Proses ke 3 [10 12 15 20 25 1 30 40 45 50] Proses ke 4 [10 12 15 20 25 1 30 40 45 50] Proses ke 5 [10 12 15 20 1 25 30 40 45 50] Proses ke 6 [10 12 15 20 1 25 30 40 45 50] Proses ke 7 [10 12 15 20 1 25 30 40 45 50] Proses ke 8 [10 12 15 20 1 25 30 40 45 50] Proses ke 9 [10 12 15 20 1 25 30 40 45 50] Putaran ke 6 : [10 12 15 20 1 25 30 40 45 50] Proses ke 1 [10 12 15 20 1 25 30 40 45 50] Proses ke 2 [10 12 15 20 1 25 30 40 45 50] Proses ke 3 [10 12 15 20 1 25 30 40 45 50] Proses ke 4 [10 12 15 1 20 25 30 40 45 50] Proses ke 5 [10 12 15 1 20 25 30 40 45 50] Proses ke 6 [10 12 15 1 20 25 30 40 45 50] Proses ke 7 [10 12 15 1 20 25 30 40 45 50] Proses ke 8 [10 12 15 1 20 25 30 40 45 50] Proses ke 9 [10 12 15 1 20 25 30 40 45 50] Putaran ke 7 : [10 12 15 1 20 25 30 40 45 50] Proses ke 1 [10 12 15 1 20 25 30 40 45 50] Proses ke 2 [10 12 15 1 20 25 30 40 45 50] Proses ke 3 [10 12 1 15 20 25 30 40 45 50] Proses ke 4 [10 12 1 15 20 25 30 40 45 50] Proses ke 5 [10 12 1 15 20 25 30 40 45 50] Proses ke 6 [10 12 1 15 20 25 30 40 45 50] Proses ke 7 [10 12 1 15 20 25 30 40 45 50] Proses ke 8 [10 12 1 15 20 25 30 40 45 50] Proses ke 9 [10 12 1 15 20 25 30 40 45 50] Putaran ke 8 : [10 12 1 15 20 25 30 40 45 50] Proses ke 1 [10 12 1 15 20 25 30 40 45 50] Proses ke 2 [10 1 12 15 20 25 30 40 45 50] Proses ke 3 [10 1 12 15 20 25 30 40 45 50] Proses ke 4 [10 1 12 15 20 25 30 40 45 50] Proses ke 5 [10 1 12 15 20 25 30 40 45 50] Proses ke 6 [10 1 12 15 20 25 30 40 45 50] Proses ke 7 [10 1 12 15 20 25 30 40 45 50] Proses ke 8 [10 1 12 15 20 25 30 40 45 50] Proses ke 9 [10 1 12 15 20 25 30 40 45 50] Putaran ke 9 : [10 1 12 15 20 25 30 40 45 50] Proses ke 1 [1 10 12 15 20 25 30 40 45 50] Proses ke 2 [1 10 12 15 20 25 30 40 45 50] Proses ke 3 [1 10 12 15 20 25 30 40 45 50] Proses ke 4 [1 10 12 15 20 25 30 40 45 50] Proses ke 5 [1 10 12 15 20 25 30 40 45 50] Proses ke 6 [1 10 12 15 20 25 30 40 45 50] Proses ke 7 [1 10 12 15 20 25 30 40 45 50] Proses ke 8 [1 10 12 15 20 25 30 40 45 50] Proses ke 9 [1 10 12 15 20 25 30 40 45 50] Putaran ke 10 : [1 10 12 15 20 25 30 40 45 50] Proses ke 1 [1 10 12 15 20 25 30 40 45 50] Proses ke 2 [1 10 12 15 20 25 30 40 45 50] Proses ke 3 [1 10 12 15 20 25 30 40 45 50] Proses ke 4 [1 10 12 15 20 25 30 40 45 50] Proses ke 5 [1 10 12 15 20 25 30 40 45 50] Proses ke 6 [1 10 12 15 20 25 30 40 45 50] Proses ke 7 [1 10 12 15 20 25 30 40 45 50] Proses ke 8 [1 10 12 15 20 25 30 40 45 50] Proses ke 9 [1 10 12 15 20 25 30 40 45 50] Dari analisis proses pengurutan diatas terdapat 10 kali putaran dan setiap putaran memiliki 9 proses. Pada saat putaran ke 9 sudah selesai tetapi tetap melakukan putaran sampai ke 10 karena ini yang menjadikan kelemahan algoritma bubble sort yang masih kurang effisien.