macam macam sorting lengkap dengan penje
By : misdi abrori(13621013)
Universitas Muhammadiyah Gresik
Macam-macam sorting dan penjelasan lengkap
1. Radix Sort
Radix sort adalah 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
berdasarkan radix pertamanya, lalu diteruskan atau diurutkan lagi berdasarkan radix keduanya, dst…
Pada system decimal radix adalah digit dalam angka decimal. Missal : angka 354 mempunyai 3 digit yaitu
3, 5 dan 4
Contoh algoritma radix sort untuk mengurutkan bilangan bulat 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 menentukan 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 jelas 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 penjelasan diatas ;
321
313
123
543
354
834
675
756
Tabel 1.2
Kemdian dilakukan pengkategorian kembali berdasarkan 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
By : misdi abrori(13621013)
Universitas Muhammadiyah Gresik
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
Tabel 1.5
Jadi, hasil akhirnya dapat dituliskan :
123
313
321,
354
543
675
756
Table 1.6
Dari proses2 yang sudah kita kerjakan menggunakan Redix Sort, sangat jelas Radix sort termasuk
algoritma pengurutan tanpa pembanding yang bersifat melihat digit2 angka sebagai pengontrolnya.
Sebenarnya Radix Sort dapat diimplementasikan dalam pengurutan bilangan Decimal dan bilangan bit.
Namun dalam penggunaannya Radix Sort bisa dimodifikasi untuk mengurutkan data2 negatif & pecahan.
Kelebiha : merupakan algoritma pengurutan yang cepat, mudah dan sangat efektif
Kekurangan : pengguaannya terbatas pada kasus2 tertentu dan memerlukan memori tambahan yang besar
dalam prosesnya mengkategorikan sebuah data.
Contoh program Radix Sort dengan Dev-C++
#include
#define MAX 20
#define SHOWPASS
#define BASE 10
void print(int *a, int n)
{
int i;
for (i = 0; i < n; i++)
834
By : misdi abrori(13621013)
Universitas Muhammadiyah Gresik
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];
By : misdi abrori(13621013)
Universitas Muhammadiyah Gresik
//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
Universitas Muhammadiyah Gresik
Macam-macam sorting dan penjelasan lengkap
1. Radix Sort
Radix sort adalah 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
berdasarkan radix pertamanya, lalu diteruskan atau diurutkan lagi berdasarkan radix keduanya, dst…
Pada system decimal radix adalah digit dalam angka decimal. Missal : angka 354 mempunyai 3 digit yaitu
3, 5 dan 4
Contoh algoritma radix sort untuk mengurutkan bilangan bulat 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 menentukan 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 jelas 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 penjelasan diatas ;
321
313
123
543
354
834
675
756
Tabel 1.2
Kemdian dilakukan pengkategorian kembali berdasarkan 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
By : misdi abrori(13621013)
Universitas Muhammadiyah Gresik
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
Tabel 1.5
Jadi, hasil akhirnya dapat dituliskan :
123
313
321,
354
543
675
756
Table 1.6
Dari proses2 yang sudah kita kerjakan menggunakan Redix Sort, sangat jelas Radix sort termasuk
algoritma pengurutan tanpa pembanding yang bersifat melihat digit2 angka sebagai pengontrolnya.
Sebenarnya Radix Sort dapat diimplementasikan dalam pengurutan bilangan Decimal dan bilangan bit.
Namun dalam penggunaannya Radix Sort bisa dimodifikasi untuk mengurutkan data2 negatif & pecahan.
Kelebiha : merupakan algoritma pengurutan yang cepat, mudah dan sangat efektif
Kekurangan : pengguaannya terbatas pada kasus2 tertentu dan memerlukan memori tambahan yang besar
dalam prosesnya mengkategorikan sebuah data.
Contoh program Radix Sort dengan Dev-C++
#include
#define MAX 20
#define SHOWPASS
#define BASE 10
void print(int *a, int n)
{
int i;
for (i = 0; i < n; i++)
834
By : misdi abrori(13621013)
Universitas Muhammadiyah Gresik
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];
By : misdi abrori(13621013)
Universitas Muhammadiyah Gresik
//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