Struktur Data : Search & Sorting

Posted on
1. Sebutkan 8 metode internal Sort serta jelaskan secara lengkap metode-metode tersebut?
2. Tuliskan pula algoritma dari 8 metode tersebut?
selection sort
Seleksi semacam algoritma sorting sederhana yang meningkatkan pada kinerja bubble sort. Ia bekerja dengan terlebih dahulu menemukan elemen terkecil menggunakan linear scan dan swapping ke posisi pertama dalam daftar, kemudian menemukan elemen kedua terkecil dengan memindai elemen yang tersisa, dan sebagainya. Seleksi semacam unik dibandingkan dengan hampir semua algoritma lainnya pada waktu berjalan tidak terpengaruh oleh memesan sebelum daftar: ia melakukan operasi jumlah yang sama karena struktur sederhana. Seleksi semacam juga hanya membutuhkan n swap, dan karenanya hanya Θ (n) memori menulis, yang optimal untuk setiap algoritma sorting. Sehingga bisa sangat menarik jika menulis adalah operasi yang paling mahal, tapi selain selection sort biasanya akan mengungguli oleh insertion sort atau algoritma yang lebih rumit.

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]);
}
}

 
Insertion sort
Insertion sort merupakan algoritma sorting sederhana yang relatif efisien untuk daftar kecil dan sebagian besar daftar-disortir, dan sering digunakan sebagai bagian dari algoritma yang lebih canggih. Ia bekerja dengan mengambil unsur-unsur dari satu daftar dengan satu dan memasukkan mereka dalam posisi yang benar mereka ke dalam daftar diurutkan baru. Pada array, daftar baru dan elemen-elemen yang tersisa dapat berbagi ruang array, tetapi penyisipan mahal, membutuhkan menggeser semua elemen-elemen berikut alih oleh satu. Jenis penyisipan bekerja seperti dengan namanya – itu memasukkan setiap barang ke tempat yang tepat dalam daftar akhir. Pelaksanaan sederhana ini membutuhkan struktur daftar dua – daftar sumber dan daftar dimana item diurutkan dimasukkan. Untuk menghemat memori, sebagian besar implementasi menggunakan semacam di tempat yang bekerja dengan menggerakkan item saat masa lalu item sudah disortir dan berulang kali bertukar dengan item sebelumnya sampai di tempat. Shell sort (lihat di bawah) adalah varian dari insertion sort yang lebih efisien untuk daftar yang lebih besar. Metode ini jauh lebih efisien daripada bubble sort, walaupun memiliki kendala lebih.
 
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]);
}
}
Shell sort
Shell sort diciptakan oleh Donald Shell pada tahun 1959. Ini meningkatkan atas bubble sort dan insertion sort dengan menggerakkan keluar dari elemen-elemen memesan lebih dari satu posisi pada suatu waktu. Salah satu implementasi dapat digambarkan sebagai mengatur urutan data dalam array dua dimensi dan kemudian menyortir kolom dari array menggunakan insertion sort. Meskipun metode ini tidak efisien untuk kumpulan data besar, ini adalah salah satu algoritma pengurutan tercepat untuk sejumlah kecil elemen (set dengan kurang dari 1000 atau lebih elemen). Keuntungan lain dari algoritma ini adalah bahwa ia memerlukan jumlah yang relatif kecil memori.
 
Merge sort
Merge sort mengambil keuntungan dari kemudahan penggabungan sudah daftar diurutkan ke daftar diurutkan baru. Dimulai dengan membandingkan setiap dua elemen (yaitu 1 dengan 2, kemudian 3 dengan 4 …) dan swapping mereka jika yang pertama datang setelah kedua. Kemudian masing-masing menggabungkan daftar yang dihasilkan dua menjadi daftar empat, kemudian menggabungkan daftar tersebut empat, dan seterusnya, sampai akhirnya dua daftar digabungkan ke dalam daftar diurutkan akhir. Dari algoritma yang dijelaskan di sini, ini adalah yang pertama yang baik daftar skala yang sangat besar.
void mergeSort(Object array[], int startIdx, int endIdx) {
if (array.length != 1) {
//Membagi rangkaian data, rightArr dan leftArr
mergeSort(leftArr, startIdx, midIdx);
mergeSort(rightArr, midIdx+1, endIdx);
combine(leftArr, rightArr);
}
}
Heapsort
Heapsort adalah versi yang jauh lebih efisien selection sort. Ia juga bekerja dengan menentukan elemen (atau terkecil) terbesar daftar, menempatkan bahwa pada akhir (atau awal) dari daftar, kemudian melanjutkan dengan sisa daftar, tapi menyelesaikan tugas ini secara efisien dengan menggunakan struktur data yang disebut tumpukan, tipe khusus pohon biner. Setelah daftar data telah dibuat menjadi tumpukan, simpul akar dijamin menjadi elemen terbesar. Ketika dipindahkan dan ditempatkan di akhir daftar, tumpukan adalah ulang sehingga elemen terbesar yang tersisa bergerak ke akar. Menggunakan heap, menemukan elemen terbesar berikutnya membutuhkan O (log n) waktu, bukan O (n) untuk linear scan di selection sort sederhana. Hal ini memungkinkan heapsort untuk menjalankan dalam O (n log n) waktu.
 
Quicksort
Quicksort adalah membagi dan menaklukkan algoritma yang mengandalkan operasi partisi: untuk partisi array, kita memilih sebuah elemen, yang disebut pivot, memindahkan semua unsur kecil sebelum poros, dan memindahkan semua elemen yang lebih besar setelah itu. Hal ini dapat dilakukan secara efisien dalam waktu linier dan di tempat. Kami kemudian secara rekursif mengurutkan sublists lebih kecil dan lebih besar. Implementasi Efisien quickSort (dengan partisi di-tempat) biasanya macam stabil dan agak rumit, tetapi adalah salah

satu dari algoritma pengurutan tercepat dalam praktek. Bersama dengan sederhana O (log n) penggunaan ruang, ini membuat salah satu quickSort dari algoritma pengurutan yang paling populer, tersedia di perpustakaan banyak standar. Isu paling kompleks di quickSort adalah memilih elemen pivot yang baik; konsisten pilihan yang buruk pivots dapat mengakibatkan drastis lebih lambat (O (n ²)) kinerja, tetapi jika di setiap langkah kita memilih median sebagai pivot maka ia bekerja dalam O (n log n).
 

void quickSort(Object array[], int leftIdx, int rightIdx) {
int pivotIdx;
/* Kondisi Terminasi */
if (rightIdx > leftIdx) {
pivotIdx = partition(array, leftIdx, rightIdx);
quickSort(array, leftIdx, pivotIdx-1);
quickSort(array, pivotIdx+1, rightIdx);
}
}
Bucket sort
Semacam Bucket adalah algoritma sorting yang bekerja dengan partisi array ke jumlah terbatas ember. Setiap ember kemudian diurutkan secara individual, baik menggunakan algoritma sorting yang berbeda, atau dengan rekursif menerapkan algoritma sorting ember. Sebuah variasi dari metode ini disebut semacam hitungan satu buffer lebih cepat daripada jenis cepat dan memakan waktu sekitar waktu yang sama untuk berjalan di setiap set data. Informasi lebih lanjut tersedia di http://www.mcky.net/hsrto.htm
 
Radix sort
Radix sort adalah sebuah algoritma yang macam daftar nomor tetap ukuran panjang k dalam O (n ° K) waktu dengan memperlakukan mereka sebagai string bit. Kami pertama-tama menyusun daftar oleh least significant bit sambil menjaga agar relatif mereka menggunakan semacam stabil. Kemudian kita mengurutkan mereka oleh bit berikutnya, dan seterusnya dari kanan ke kiri, dan daftar ini akan berakhir diurutkan. Paling sering, algoritma penghitungan semacam ini digunakan untuk menyelesaikan penyortiran bitwise, karena jumlah nilai sedikit dapat memiliki adalah kecil.
Sorting
Ascending Sorting
Descending Sorting
Gravatar Image
Suka jalan-jalan, naik sepeda, bermain code-code asal tidak suka mengkode cinta. Hubungi email : andhika.na@gmail.com jika anda butuh website untuk personal maupun bisnis.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.