SORTING ARRAY
Sorting
Salah satu bagian penting dari struktur data adalah proses pengurutan data-data itu sendiri.
Data akan terkadang akan berada dalam bentuk yang tidak berpola ataupun dengan pola tertentu yang
tidak kita inginkan, namun dalam penggunaanya, kita akan selalu ingin menggunakan data-data
tersebut dalam bentuk yang rapi atau berpola sesuai dengan yang kita inginkan. Maka dari itu proses
sorting adalah proses yang sangat penting dalam struktur data, terlebih untuk pengurutan data yang
bertipe numerik ataupun karakter.
Sorting adalah proses menyusun kembali data yang sebelumnya telah disusun dengan suatu pola
tertentu ataupun secara acak, sehingga menjadi tersusun secara teratur menurut aturan tertentu.
Algoritma untuk melakukan sorting juga ada berbagai macam, antara lain:
Pemilihan algoritma untuk sorting ini tidak hanya asal saja dipilih. Pemilihian ini semestinya
berdasarkan kebutuhan yang diperlukan. Tidak semua algortima yang pendek itu buruk dan tidak
semua algoritma yang super cepat juga akan baik dalam semua kondisi. Misal: algoritma Quick Sort
adalah algoritma sorting yang tercepat dalam proses pencariannya, namun jika data yang akan
diurutkan ternyata sudah hampir terurut atau tidak terlalu banyak, maka algoritma ini malah akan
memperlama proses pengurutan itu sendiri, karena akan banyak perulangan tidak perlu yang dilakukan
dalam proses sorting ini.
Hal yang umum dilakukan dalam proses sorting adalah proses pertukaran antara 2 elemen atau
lebih (analogi memindah air dalam gelas). Untuk melakukan proses pertukaran akan diperlukan adanya
variable baru yang digunakan sebagai variable penampung.
Sorting Algorithm
o Bubble Sort
Metode sorting paling mudah, namun paling lambat dibandingkan dengan yang lain.
Bubble sort mengurutkan data dengan cara membandingkan elemen sekarang
dengan elemen berikutnya.
Bisa dilakukan baik dari kepala array maupun ekor array.
Proses yang berlangsung, jika:
Ascending: jika elemen sekarang lebih besar daripada elemen berikutnya,
maka kedua elemen tersebut ditukar.
Descending: jika elemen sekarang lebih kecil daripada elemen berikutnya,
maka kedua elemen tersebut ditukar.
Hal ini akan terlihat seperti penggeseran angka, perbandingan, kemudian jika
memenuhi syarat kemudian tukar.
Proses penukaran ini akan terus dilakukan hingga seluruh array telah diperiksa.
Contoh fungsi bubble sort:
//Bubble Sort
void bubble (int a[], int n) {
int i,j;
for (i=n;i>=1;i--) {
for (j=2;j<i;j++)
if(a[j-1]>a[j])
tukar (a,j-1,j);
}
}
o Exchange Sort
Mirip dengan bubble sort.
Perbedaannya: dalam exchange sort ada elemen yang berfungsi sebagai pusat
(pivot), pertukaran hanya akan dilakukan jika diperlukan saja dari pivot tersebut.
Sedangkan bubble sort akan membandingkan elemen pertama/terakhir dengan
elemen sebelumnya/sesudahnya, kemudian elemen sebelum/sesudahnya itu akan
o Selection Sort
Kombinasi sorting dan searching.
Untuk setiap proses, akan dilakukan dengan mencari elemen dari posisi yang belum
diurutkan dan kemudian memilih elemen yang memiliki nilai terkecil atau terbesar
yang akan ditukarkan ke posisi yang tepat di dalam array.
Misalnya untuk putaran pertama, akan dicari data dengan nilai terkecil dan data ini
akan ditempatkan pada indeks terkecil, pada putaran kedua akan dicari data kedua
terkecil, dan akan ditempatkan di indeks kedua, negitu seterusnya hingga tidak ada
data yang dicari lagi.
Selama proses, pembandingan dan pengubahan hanya dilakukan pada indeks
pembanding saja, pertukaran data secara fisik terjadi pada akhir proses.
Contoh fungsi selection sort:
//Selection Sort
void selection (int a[],int n) {
int i,j,pos;
for (i=1;i<n;i++) {
pos=i;
for (j=i+1;j<=n;j++)
if(a[j]<a[pos])
pos=j;
tukar(a,pos,i);
}
}
o Insertion Sort
Analogi pengurutan kartu.
Proses dilakukan dengan membandingkan data ke-I dengan data yang sebelum-
sebelumnya.
Misal ascending: pengurutan dimulai dari data ke-2 sampai dengan data terakhir,
jika ditemukan data yang lebih kecil, maka akan dimasukkan di posisi yang
seharusnya.
Pada penyisipan elemen, maka elemen-elemen lain akan bergeser ke belakang.
Contoh fungsi insertion sort:
//Insertion Sort
void insertion (int a[],int n) {
int i,j,v;
for (i=2;i<=n;i++) {
v=a[i];
j=1;
while (a[j-1]>v) {
a[j]=a[j-1]
j--;
a[j=v];
}
}
o Quick Sort
Bersifat divide&conquer.
Merupakan metode pencarian yang sangat cepat (saat ini tercepat).
Pertama-tama deret dibagi menjadi dua bagian, misal, semua elemen pada bagian b
(bagian pertama) mempunyai kurang dari atau sama dengan semua elemen pada
bagaian c (bagian kedua -- membagi). Kemudian kedua bagian tersebut dilakukan
proses sorting dengan rekursif secara terpisah dengan prosedur yang sama(coquer).
Kemudian gabungkan lagi kedua bagian terpisah tersebut.
Langkah:
Memilih sebuah elemen pembanding (pivot), misal x.
Semua elemen dari deret tersebut yang kurang dari x diletakkan pada bagian
pertama.
Kemudian semua elemen dari yang lebih besar dari x diletakkan pada bagian
kedua.
Untuk elemen yang sama dengan x bias diletakkan di mana saja bahkan bisa
juga di antara kedua bagian tersebut.
Algoritma partisi:
Input : sequence a0, ..., an-1 with n elements
Output : permutation of the sequence such that all elements a0, ..., aj are less than
or equal to all elements ai, ..., an-1 (i > j)
Method : choose the element in the middle of the sequence as comparison element
x
let i = 0 and j = n-1
while i j
search the first element ai which is greater than or equal to x
search the last element aj which is less than or equal to x
if i j
exchange ai and aj
let i = i+1 and j = j-1
setelah mempartisi, prosedur sorting akan dilakukan secara rekursif. Hingga proses
rekursif tersebut akan berhenti saat sebuah bagian hanya tinggal terdapat satu
elemen saja.
Tidak baik digunakan jika elemen-elemen yang akan diurutkan hanya ada sedikit
atau sudah hamper terurut, karena jika menggunakan metode ini justru akan
melakukan perulangan yang tidak berguna dan lama.
Mempunyai algoritma dan program yang cukup kompleks.
Contoh fungsi quick sort:
//Quick Sort
void quicksort (int a[],int l,int r) {
int i,j,v;
if(r>1) {
v=a[r];i=l-1;j=r;
for(;;) {
while(a[++i]<v);
while(a[--j]>v);
if(i>=j)
break;
tukar(a,i,j)
}
tukar(a,i,r);
quicksort(a,l,i-1);
quicksort(a,i+1,r);
}
}
Pengembangan:
o Dari potongan-potongan fungsi sorting di atas, buatlah sebuah program yang dapat
menampilkan semua hasil sorting dalam berbagai versi!
o Dari program tersebut tambahkanlah bagian program yang dapat menampilkan proses
sorting yang sebenarnya terjadi (tidak hanya hasil akhirnya saja)! Sehingga Anda pun akan
lebih mudah memahami proses yang terjadi dalam suatu sorting…
o Buat program yang dapat mengurutkan sebuah urutan alphabet!
Soal:
o Buat program dengan inputan NIM (empat digit terakhir), nama, dan fakultas untuk
beberapa mahasiswa, kemudian lakukan sorting terhadap inputan berdasarkan NIMnya!
o Buat sebuah program database pabrik, merk, CC dan harga sepeda motor kemudian hasil
tersebut bisa diurutkan berdasarkan harga dan CCnya (secara ascending dan descending)!
Misal:
Yamaha >> Mio >> 135CC >> 12.000.000
Honda >> Revo >> 100CC >> 13.000.000
Viar >> ViarX >> 125CC >> 7.000.000