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