Sorting Selection Sort Straight insertion Sort Merge Sort Paradigma Divide-and-Conquer Quicksort Paradigma Divide-and-Conquer
Algoritma pengurutan adalah algoritma untuk meletakkan kumpulan elemen data ke dlm urutan tertentu, berdasarkan satu atau beberapa kunci ke dalam tiap-tiap elemen
Mengatur elemen berdasar urutan tertentu Digunakan secara luas dalam aplikasi Beberapa algoritma sorting telah dibuat karena proses tersebut sangat mendasar dan sering digunakan
Memudahkan dalam pencarian & memudahkan dalam melihat data Contoh : Kamus, buku telepon, kartu berobat, kartu perpustakaan, dst
Algoritma sorting yang lainnya Intuitif dan mudah diimplementasikan Juga mirip dengan cara lain dalam pengurutan kartu Tujuan: mengurutkan kartu secara ascending Diberikan: kartu, meja Awal: Kartu disebar secara acak pada tabel Periksa nilai, kemudian pilih kartu dengan nilai terendah Tukarkan posisi kartu ini dengan kartu pertama pada meja Cari kartu dengan nilai terendah dari sisa kartu yang ada Tukarkan kartu terpilih dengan kartu pada posisi kedua Ulangi proses hingga kartu kedua sebelum terakhir pada meja dibandingkan dan ditukar dengan kartu terakhir
Pilih elemen dengan nilai terendah Tukarkan elemen terpilih dengan elemen pada posisi ke - i i dimulai dari 1 hingga n Dimana n adalah total elemen yang ada dikurangi 1
1 void selectionsort(object array[], int startidx, 2 int endidx) { 3 int min; 4 for (int i = startidx; i < endidx; i++) { 5 min = i; 6 for (int j = i + 1; j < endidx; j++) { 7 if (((Comparable) array[min]).compareto( 8 array[j])>0) { 9 min = j; 10 } 11 } 12 swap(array[min], array[i]); 13 } 14 }
Data di cek satu persatu mulai dari yang kedua sampai dengan yang terakhir, apabila ditemukan data yang lebih kecil, daripada data sebelumnya, maka data tersebut disisipkan pada posisi yang sesuai.
i=2,n x=data[i] data[0]=x j=i-1 data[j+1]=x x<data[j] t y data[j+1]=data[j] dec(j)
Menggunakan rekursi dalam penyelesaiannya : Permasalahan awal dipilah menjadi sub-masalah Solusi atas sub-masalah menuntun menuju permasalahan utama 3 Langkah: Divide Membagi permasalahan menjadi submasalah Conquer Menyelesaikan sub-masalah secara rekursif Jika sub-masalah cukup sederhana dan kecil, selesaikan secara langsung Combine Kombinasikan solusi dari sub-masalah yang ada, hingga mencapai permasalahan utama
Menggunakan pendekatan divide-and-conquer Divide Membagi elemen data menjadi dua bagian Conquer Selesaikan tiap bagian secara rekursif dengan memanggil method mergesort. Combine Kombinasikan dua bagian secara rekursif untuk mendapatkan urutan yang diharapkan Rekursi selesai pada saat sisa dari sebagian elemen yang akan diurutkan tepat tersisa satu Telah terurutkan
1 void mergesort(object array[], int startidx, 2 int endidx) { 3 if (array.length!= 1) { 4 Divide the array into two halves, 5 leftarr and rightarr 6 mergesort(leftarr, startidx, mididx); 7 mergesort(rightarr, mididx+1, endidx); 8 combine(leftarr, rightarr); 9 } 10 }
Ditemukan oleh C.A.R. Hoare Berdasar pada paradigma divide-and-conquer Divide Bagi array menjadi dua subarray A[p...q-1] dan A[q+1...r] dimana A[p...q-1] adalah kurang dari atau sama dengan A[q] dan elemen pada A[q+1...r] adalah lebih dari atau sama dengan A[q] A[q] disebut sebagai pivot Perhitungan q adalah bagian dari prosedur pemisahan Conquer Urutkan subarray tersebut dengan memanggil method quicksort secara rekursif Tak perlu melakukan proses Combine Subarrays telah terurutkan
1 void quicksort(object array[], int leftidx, 2 int rightidx) { 3 int pivotidx; 4 /* Termination condition! */ 5 if (rightidx > leftidx) { 6 pivotidx = partition(array, leftidx, rightidx); 7 quicksort(array, leftidx, pivotidx-1); 8 quicksort(array, pivotidx+1, rightidx); 9 } 10 }
Teknik Sorting sederhana Insertion Sort Selection Sort Paradigma Divide-and-Conquer Merge Sort Quicksort