Algoritma
Sorting
Pengertian
Algoritma Sorting merupakan algoritma yang menempatkan elemen list pada urutan tertentu. Urutan yang sering
digunakan ialah urutan numerikal dan lexicographical. Sorting yang
efisien sangat dibutuhkan untuk mengoptimisasi penggunaan dari algoritma lain
seperti pencarian dan penggabungan yang membutuhkan list terurut
untuk berjalan dengan sempurna, dan menghasilkan output yang dapat dibaca
manusia. Output harus melengkapi dua syarat ini:
1. Output merupakan urutan
yang tidak menurut (nondecreasing) (setiap elemen tidak lebih kecil dari elemen
sebelumnya menurut dari urutan keseluruhan yang diinginkan.
2. Output merupakan permutasi
(pengurutan kembali) dari inputan yang diberikan.
Sejak permulaan komputasi, masalah pengurutan
ini telah menarik penelitian yang serius, mungkin dikarenakan kerumitan dari
penyelesaian secara efisien disamping mudah, dan dengan statemen yang kita
mengerti. Sebagai contoh, bubble sort pertama sekali ditemukan pada tahun 1956.
Walaupun banyak yang memperkirakan masalahnya telah terselesaikan, banyak
algoritma sorting baru yang masih ditemukan samapai sekarang (sebagai contoh, Library
Sort yang baru dipublikasikan pertama sekali pada tahun 2006). Algoritma
sorting sangat umum pada setiap kelas pengenalan bidang Ilmu Komputer, dimana
banyaknya algoritma untuk masalah ini menyediakan pengenalan awal mengenai
banyaknya konsep algoritma inti, seperti Notasi Big O, Algoritma
Pembagi, Struktur Data, Algoritma Acak, Analisa
Best, Worst, Average Case, Running Time Calculation, dan Batas
Atas dan Bawah
Penggunaan
- Kompleksitas Komputasi (Average, Best, Worst case) perbandingan elemen dengan besar list(n). Untuk beberapa Algoritma sorting kasus yang paling baiknya ialah O(n log n) dan kasus terburuknya ialah O(n2). Kasus ideal untuk masalah sorting ialah O(n), tetapi ini tidak mungkin terjadi pada average case. Sequential Sort, yang menaksir elemen dari list dari operasi perbandingan indeks abstrak, yang membutuhkan paling kurang perbandingan O(n log n) untuk paling banyak input.
- Stabilitas: menjaga urutan relatif dari rekord dengan indeks sama (contoh: nilai).
- Apakah dia merupakan Sorting Pembanding atau tidak. Sorting pembanding memeriksa data dengan hanya membandingkan dua elemen dengan operator pembanding.
- Metode Umum: memasukkan, menukar, memilih, menggabungkan, dll. Sorting Penukaran mencangkup bubble sort dan quicksort. Sorting Seleksi mencangkup shaker sort dan heapsort.
- Penyesuaian: Apakah terdapat sorting yang belum terurut atau tidak dari inputannya, segalanya akan mempengaruhi waktu kalkulasinya. Algoritma yang mengambil cara ini sebagai caranya dikenal sebagai Adaptive.
Macam-macam Sorting
- Buble Sort :
Merupakan
algoritma pengurutan paling tua dengan metode pengurutan paling sederhana.
Pengurutan yang dilakukan dengan membandingkan masing-masing item dalam
suatu list secara berpasangan, menukar item jika diperlukan, dan
mengulaginya sampai akhir list secara berurutan, sehingga tidak ada lagi item
yang dapat ditukar.
- Selection Sort :
Ide
utama dari algoritma selection sort adalah memilih elemen dengan nilai
paling rendah dan menukar elemen yang terpilih dengan elemen ke-i. Nilai
dari i dimulai dari 1 ke n, dimana n adalah jumlah total
elemen dikurangi 1.
- Insertion Sort :
Algoritma
insertion sort pada dasarnya memilah data yang akan diurutkan menjadi
dua bagian, yang belum diurutkan dan yang sudah diurutkan. Elemen pertama
diambil dari bagian array yang belum diurutkan dan kemudian diletakkan sesuai
posisinya pada bagian lain dari array yang telah diurutkan. Langkah ini
dilakukan secara berulang hingga tidak ada lagi elemen yang tersisa pada bagian
array yang belum diurutkan.
- Shell Sort :
Merupakan
algoritma yang stau jenis dengan insertion sort, dimana pada setiap
nilai i dalam n/i item diurutkan. Pada setiap pergantian nilai, i
dikurangi sampai 1 sebagai nilai terakhir
- Merge Sort :
Algoritma
dirumuskan dalam 3 langkah berpola divide-and-conquer. Berikut
menjelaskan langkah kerja dari Merge sort.
1.
Divide
Memilah
elemen – elemen dari rangkaian data menjadi dua bagian.
2.
Conquer
Conquer
setiap bagian dengan memanggil prosedur merge sort secara rekursif
3.
Kombinasi
Mengkombinasikan
dua bagian tersebut secara rekursif untuk mendapatkan rangkaian data berurutan
Proses
rekursi berhenti jika mencapai elemen dasar. Hal ini terjadi bilamana bagian
yang akan diurutkan menyisakan tepat satu elemen. Sisa pengurutan satu elemen
tersebut menandakan bahwa bagian tersebut telah terurut sesuai rangkaian.
- Quick Sort :
Algoritma
ini berdasar pada pola divide-and-conquer. Berbeda dengan merge sort, algoritma
ini hanya mengikuti langkah – langkah sebagai berikut :
1.
Divide
Memilah
rangkaian data menjadi dua sub-rangkaian A[p…q-1] dan A[q+1…r] dimana setiap
elemen A[p…q-1] adalah kurang dari atau sama dengan A[q] dan setiap elemen pada
A[q+1…r] adalah lebih besar atau sama dengan elemen pada A[q]. A[q] disebut
sebagai elemen pivot. Perhitungan pada elemen q merupakan salah satu bagian
dari prosedur pemisahan.
2.
Conquer
Mengurutkan
elemen pada sub-rangkaian secara rekursif. Pada algoritma quicksort, langkah
”kombinasi” tidak di lakukan karena telah terjadi pengurutan elemen – elemen
pada sub-array
- Heap Sort:
Heap
sort adalah sorting yang menggunakan struktur data heap, dengan nilai parent
selalu lebih besar dari pada nilai childnya.
Algoritma:
1. Buat suatu heap.
2. Ambil isi dari root
masukkan kedalam sebuah array.
3. Hapus element root dengan mempertahankan
properti heap.
4. Ulangi sampai tree menjadi
kosong
- Bucket Sort :
Algoritma:
- Cari nilai maksimum dan minimum di array
- Inisialisasi array bucket Daftar <> unsur (ukuran maxValue – minValue + 1)
- Pindahkan elemen dalam array untuk bucket
- Write bucket keluar (dalam rangka) ke array yang asli
- Radix Sort:
Secara
kompleksitas waktu, radix sort termasuk ke dalam Divide and Conquer.Namun
dari segi algoritma untuk melakukan proses pengurutan, radix sort tidak
termasuk dalam Divide and Conquer.
Radix
sortmerupakan sebuah algoritma pengurutan yang mengatur pengurutan nilai tanpa
melakukan beberapa perbandingan pada data yang dimasukkan.
Tidak ada komentar:
Posting Komentar