As-salamu'alaykum wr wb.
Lama ga posting artikel nih, maaf saya sibuk CBT Produktif hehe ..
oke , postingan kali ini saya akan membahas wacana shorting di C++ / Cplusplus hehe ..
Q : Shorting itu apa sih ka?
A : Shorting atau pengurutan adalah proses penyusunan kembali suatu data yang sebelumnya sudah disusun secara teratur sesuai dengan pola dan metode tertentu. Pengurutan sanggup secara ascending(urut naik) atau descending(urut turun). Perlu anda ketahui bahwa pengurutan data dalam struktur data sangatlah penting terutama untuk data yang bersifat integer, pecahan, ataupun karakter.
Q : di C++ ada berapa macam shorting ka?
A : Ada banyak, Yuk kita bahas materi shorting .. hehe
1. Radix Sort
Radix sort yakni algoritma non-comparation sort atau pengurutan tanpa perbandingan . metode ini mengklarifikisi sebuah data sesuai dengan kategori urutan tertentu. Dan setiap kategori diurutkan lagi dan seterusnya sesuai dengan kebutuhan. Kemudian bagian2 dari kategori tersebut akan digabungkan kembali.
Catatan : data yang diurutkan pertama kali yaitu berupa input nilai2 yang dimasukkan pertama kali menurut radix pertamanya, kemudian diteruskan atau diurutkan lagi menurut radix keduanya, dst…
Pada system decimal radix yakni digit dalam angka decimal. Missal : angka 354 mempunyai 3 digit yaitu 3, 5 dan 4
Contoh algoritma radix sort untuk mengurutkan bilangan bundar positif, dengan jumlah digit maksimal 3 :
313 | 354 | 123 | 321 | 543 | 756 | 834 | 675 |
· Pertama kita harus membagi-bagi data sesuai dengan urutan terkanan
· Lihat terlebih dahulu digit yang paling besar untuk memilih kategori berapa baris data yang akan kita urutkan, dan dicontoh ini nilai digit paling besar yaitu angka 8, sehingga kategori sebanyak 8 baris dan diawali dengan angka 0. Supaya lebih terperinci lihat table dibawah :
Kategori digit 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
isi | - | 321 | - | 313,123, 543 | 354,834 | 675 | 756 | - | - |
Tabel 1.1
Hasil dari kategori pertama tadi akan digabungkan kembali sesuai dengan klarifikasi diatas ;
321 | 313 | 123 | 543 | 354 | 834 | 675 | 756 |
Tabel 1.2
Kemdian dilakukan pengkategorian kembali menurut dengan digit yang ke-2 dengan berpatokan / melihat baris urutan dari pengkategorian yang pertama tadi yaitu (Tabel 1.2).
Kategori digit 2 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
isi | - | 313 | 321,123 | 834 | 543 | 354,756 | - | 675 | - |
Tabel 1.3
Selanjutnya hasil dari pengkategorian ke-2 digabungkan kembali sehingga diperoleh :
313 | 321 | 123 | 834 | 543 | 354 | 756 | 675 |
Table 1.4
Langkah terakhir yaitu pengkategorian ke-3 berdasar digit ke-3 dengan berpatokan melihat baris urutan pengkategorian ke-2 yaitu (Tabel 1.4)
Kategori digit 3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
isi | - | 123 | - | 313,321, 354 | - | 543 | 675 | 756 | 834 |
Jadi, hasil balasannya sanggup dituliskan :
123 | 313 | 321, | 354 | 543 | 675 | 756 | 834 |
Table 1.6
Dari proses2 yang sudah kita kerjakan memakai Redix Sort, sangat terperinci Radix sort termasuk algoritma pengurutan tanpa pembanding yang bersifat melihat digit2 angka sebagai pengontrolnya. Sebenarnya Radix Sort sanggup diimplementasikan dalam pengurutan bilangan Decimal dan bilangan bit. Namun dalam penggunaannya Radix Sort sanggup dimodifikasi untuk mengurutkan data2 negatif & pecahan.
Kelebiha : merupakan algoritma pengurutan yang cepat, gampang dan sangat efektif
Kekurangan : pengguaannya terbatas pada kasus2 tertentu dan memerlukan memori komplemen yang besar dalam prosesnya mengkategorikan sebuah data.
//Radix sort; #include <stdio.h> #define MAX 20 #define SHOWPASS #define BASE 10 void print(int *a, int n) { int i; for (i = 0; i < n; i++) printf("%d\t", a[i]); } void radixsort(int *a, int n) { int i, b[MAX], m = a[0], exp = 1; //Get the greatest value in the array a and assign it to m for (i = 1; i < n; i++) { if (a[i] > m) m = a[i]; } //Loop until exp is bigger than the largest number while (m / exp > 0) { int bucket[BASE] = { 0 }; //Count the number of keys that will go into each bucket for (i = 0; i < n; i++) bucket[(a[i] / exp) % BASE]++; //Add the count of the previous buckets to acquire the indexes after the end of each bucket location in the array for (i = 1; i < BASE; i++) bucket[i] += bucket[i - 1]; //similar to count sort algorithm i.e. c[i]=c[i]+c[i-1]; //Starting at the end of the list, get the index corresponding to the a[i]'s key, decrement it, and use it to place a[i] into array b. for (i = n - 1; i >= 0; i--) b[--bucket[(a[i] / exp) % BASE]] = a[i]; //Copy array b to array a for (i = 0; i < n; i++) a[i] = b[i]; //Multiply exp by the BASE to get the next group of keys exp *= BASE; #ifdef SHOWPASS printf("\nPASS : "); print(a, n); #endif } } int main() { int arr[MAX]; int i, n; printf("Enter total elements (n <= %d) : ", MAX); scanf("%d", &n); n = n < MAX ? n : MAX; printf("Enter %d Elements : ", n); for (i = 0; i < n; i++) scanf("%d", &arr[i]); printf("\nARRAY : "); print(&arr[0], n); radixsort(&arr[0], n); printf("\nSORTED : "); print(&arr[0], n); printf("\n"); return 0; }
2. Quick Short
Quick Sort yakni algoritma sorting yang menurut pembanding dengan metode divide and conqueror, sangat berbeda dengan Radix Sort yang tanpa pembanding. Disebut Quick Sort sebab algoritma Quick Sort mengurutkan dengan sangat cepat atau Quick Sort juga bias disebut dengan exchange sort, sebab konsepnya yang menciptakan partisi2 dan Sort yang dilakukan tiap partisi.
Kelebihan :
· Algoritma sederhana dan gampang diterapkan pada banyak sekali bahasa pemrograman dan arsitektur mesin secara efisien.
· Algoritma pengurutan yang lebih cepat dengan perbandingan menyerupai Marge Sort dan Heap Sort.
· Melakukan proses secara pribadi pada input(in-place) dengan sedikit komplemen memory.
· Bias dipakai dgn baik untuk input angka daan karakter
Kekurangan :
· Sedikit kesalahan saja didalam jadwal sanggup menyebablkan jadwal tidak beraturan atau outputan tidak benar bahkan sanksi tidak akan pernah selesai.
· Memiliki ketergantungan terhadap data yang dimasukkan.
· Sifatnya yg kurang stable sebab input yang akan dirubah pada hasil akhirnya(output) bernilai
sama.
· Memiliki katergantungan terhadap data yang dimasukkan.
· Pada penerapan rekursif(memanggil dirinya sendiri) bahkan dalam masalah terburuk sanggup mampu menghabiskan stack dan memacetkan rogram.