Algoritma sorting
Topik Sorting Insertion Sort Selection Sort Merge Sort Paradigma Divide-and-Conquer Quicksort
Sorting Mengatur elemen berdasar urutan tertentu Digunakan secara luas dalam aplikasi Beberapa algoritma sorting telah dibuat karena proses tersebut sangat mendasar dan sering digunakan
Insertion Sort Salah satu algoritma paling sederhana Cukup intuitif dan prosesnya mirip dengan mengurutkan kartu Tujuan: mengurutkan kartu dari paling kecil hingga terbesar Terdapat: kartu, meja 1, meja 2 Awal: Kartu acak diletakkan pada meja 1 Teknik: Kartu berurutan diletakkan pada meja 2 Ambil kartu pertama dari meja 1, bandingkan dengan tabel 2 dan tempatkan sesuai posisi urutan di meja 2 Ulangi hingga seluruh kartu terletak pada meja 2
Insertion Sort: Algoritma Bagi elemen data yang akan diurutkan menjadi dua Bagian yang belum diurutkan Bagian yang telah terurutkan Ulangi langkah tersebut hingga tidak ada elemen tersisa dalam array Elemen pertama dipilih dari bagian yang belum diurutkan Tempatkan elemen terpilih sesuai urutan pada array
Insertion Sort: Algoritma void insertionSort(Object array[], int startIdx, int endIdx) { for (int i = startIdx; i < endIdx; i++) { int k = i; for (int j = i + 1; j < endIdx; j++) { if (((Comparable) array[k]).compareTo( array[j])>0) { k = j; } swap(array[i], array[k]);
Insertion Sort: Contoh
Selection Sort 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
Selection Sort: Algoritma 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
Selection Sort: Algoritma void selectionSort(Object array[], int startIdx, int endIdx) { int min; for (int i = startIdx; i < endIdx; i++) { min = i; for (int j = i + 1; j < endIdx; j++) { if (((Comparable) array[min]).compareTo( array[j])>0) { min = j; } swap(array[min], array[i]);
Selection Sort: Contoh
Merge Sort: Paradigma Divide-and-Conquer 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
Merge Sort: Algoritma Membagi elemen data menjadi dua bagian 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
Merge Sort: Algoritma void mergeSort(Object array[], int startIdx, int endIdx) { if (array.length != 1) { Divide the array into two halves, leftArr and rightArr mergeSort(leftArr, startIdx, midIdx); mergeSort(rightArr, midIdx+1, endIdx); combine(leftArr, rightArr); }
Merge Sort: Contoh
Quicksort: Algoritma 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
Quicksort: Algoritma void quickSort(Object array[], int leftIdx, int rightIdx) { int pivotIdx; /* Termination condition! */ if (rightIdx > leftIdx) { pivotIdx = partition(array, leftIdx, rightIdx); quickSort(array, leftIdx, pivotIdx-1); quickSort(array, pivotIdx+1, rightIdx); }
Quicksort: Contoh
Quicksort: Contoh
Kesimpulan Teknik Sorting sederhana Paradigma Divide-and-Conquer Insertion Sort Selection Sort Paradigma Divide-and-Conquer Merge Sort Quicksort