4. SORTING

18
SORTING 1. Pengertian Sorting Sorting merupakan sebuah proses mengurutkan data yang berada dalam suatu tempat penyimpanan, dengan urutan menaik (ascending) dari nilai terkecil sampai dengan nilai terbesar, atau urutan menurun (descending) dari nilai terbesar sampai dengan nilai terkecil. Perhatikan ilustrasi Gambar 1.1. Gambar 1.1 Pengurutan 2. Metode Bubble Sort Metode bubble sort merupakan metode yang paling sederhana untuk melakukan pengurutan data, mudah dipahami tetapi tidak cocok untuk data yang besar. Bubble sort mengurutkan data dengan cara membandingkan sebuah elemen satu per satu dengan elemen selanjutnya. Teknik urutan ascending dilakukan jika terdapat sebuah elemen nilainya lebih besar daripada elemen berikutnya, kemudian kedua elemen tersebut akan ditukar. Sedangkan teknik descending dilakukan jika terdapat sebuah elemen nilanya lebih kecil daripada nilai elemen berikutnya, kemudian kedua elemen tersebut akan ditukar. Algoritma bubble sort seolah-olah menggeser satu per satu elemen dari kanan ke kiri atau dari kiri ke kanan, tergantung teknik pengurutan yang dipilih. Ketika satu proses selesai, maka bubble sort akan terus mengulangi

description

algoritma dan struktur data

Transcript of 4. SORTING

SORTING1. Pengertian SortingSorting merupakan sebuah proses mengurutkan data yang berada dalam suatu tempat penyimpanan, dengan urutan menaik (ascending) dari nilai terkecil sampai dengan nilai terbesar, atau urutan menurun (descending) dari nilai terbesar sampai dengan nilai terkecil. Perhatikan ilustrasi Gambar 1.1.

Gambar 1.1 Pengurutan

2. Metode Bubble SortMetode bubble sort merupakan metode yang paling sederhana untuk melakukan pengurutan data, mudah dipahami tetapi tidak cocok untuk data yang besar. Bubble sort mengurutkan data dengan cara membandingkan sebuah elemen satu per satu dengan elemen selanjutnya. Teknik urutan ascending dilakukan jika terdapat sebuah elemen nilainya lebih besar daripada elemen berikutnya, kemudian kedua elemen tersebut akan ditukar. Sedangkan teknik descending dilakukan jika terdapat sebuah elemen nilanya lebih kecil daripada nilai elemen berikutnya, kemudian kedua elemen tersebut akan ditukar.Algoritma bubble sort seolah-olah menggeser satu per satu elemen dari kanan ke kiri atau dari kiri ke kanan, tergantung teknik pengurutan yang dipilih. Ketika satu proses selesai, maka bubble sort akan terus mengulangi proses tersebut dan akan berhenti apabilaseluruha array telah diperiksa dan tidak ada pertukaran yang dilakukan lagi serta tercapai pengurutan yang telah diinginkan.Misalnya, terdapat sebuah data sebagai berikut.23 46 11 19 38 57

Contoh proses pengurutan Bubble Sort dengan urutan naik dapat dilihat pada ilustrasi Gambar 1.2 sampai dengan Gambar 1.4

Gambar 1.2 Bubble sort proses pertama

Gambar 1.3 Bubble sort proses kedua

Gambar 1.4 Bubble sort proses ketiga

Contoh Implementasi Bubble SortBerikut ini contoh program dari Bubble Sort untuk melakukan pengurutan sebuah data dalam array satu dimensi yang sudah diinisialisasikan.

Algoritma:SUBRUTIN bubble_sort(L, n)FOR tahap 1 s/d n-1FOR j 0 s/d n-tahap-1IF L[j] > L[j+1] THEN//Lakukan Penukarantmp L[j]L[j] L[j+1]L[j+1] tmpEND-IFEND-FOREND-FOREND-SUBRUTIN

Program C++:#include

void tampilkan_larik(int data[], int n){int i;for(i = 0; i < n; i++)printf(" %d ", data[i]);printf("\n");}

void bubble_sort(int data[], int n){int tahap, j, tmp;printf("\tMetode Bubble Sort\n\n");for(tahap = 1; tahap < n; tahap++){for(j = 0; j data[j+1]){//Tukarkantmp = data[j];data[j] = data[j+1];data[j+1] = tmp;}printf("Proses Pengurutan ke-%d : ", tahap);tampilkan_larik(data, n);}}

int main(){const int JUM_DATA = 5;int data[] ={21, 3, 19, 36, 17};int i;bubble_sort(data, JUM_DATA);//Hasil pengurutanprintf("\n\nHasil Pengurutan Bubble Sort: \n\n");tampilkan_larik(data, JUM_DATA);return 0;}

3. Metode Selection Sort Metode seleection sort merupakan kombinasi antara sorting dan searching, dimana metode seleksi akan melakukan pengurutan dengan cara mencari data yang terkecil kemudian menukarkannya dengan data yang digunakan sebagai acuan atau sering dinamakan pivot.Pengurutan seleksi (selection sort) mempunyai mekanisme seperti berikut: mula-mula suatu penunjuk (diberi nama posAwal), yang menunjuk ke lokasi awal pengurutan data, diatur agar berisi indeks pertama dalam larik. Selanjutnya, dicari bilangan terkecil yang terletak antara posisi sesudah yang ditunjuk oleh penunjuk tersebut hingga elemen yang terakhir dalam larik. Lokasi bilangan ini ditunjuk oleh posMin. Kemudian, tukarkan nilai bilangan terkecil tersebut dengan nilai yang ditunjuk oleh posAwal. Proses seperti itu diulang sampai posAwal bernilai 0 hingga n-1, dengan n menyatakan jumlah elemen dalam larik. Lihat ilustrasi pada Gambar 1.5.

Gambar 1.5 Pengurutan Seleksi

Contoh Implementasi Selection SortBerikut ini contoh program dari Selection Sort untuk melakukan pengurutan sebuah data dalam array satu dimensi.

Algoritma:SUBRUTIN selection_sort(L, n)FOR posAwal 0 s/d n-2posMin posAwalFOR j posAwal s/d n-1IF L[posMin] > L[j] THENposMin jEND-IF END-FOR

//Lakukan Penukarantmp L[posAwal]L[posAwal] L[posMin]L[posMin] tmpEND-FOREND-SUBRUTIN

Program C++:#include

void tampilkan_larik(int data[], int n){int i;for(i = 0; i < n; i++)printf(" %d ", data[i]);printf("\n");}

void selection_sort(int data[], int n){int posMin, posAwal, j, tmp;printf("\tMetode Selection Sort\n\n");for(posAwal=0; posAwal< n-1; posAwal++){posMin=posAwal;for(j=posAwal+1; j data [j])posMin=j;//Tukarkantmp= data[posAwal];data[posAwal]=data[posMin];data[posMin]=tmp;printf(" Hasil posAwal = %d : ", posAwal);tampilkan_larik(data, n);}}

int main(){const int JUM_DATA = 6;int data[] ={42, 35, 23, 28, 26, 17};int i;selection_sort(data, JUM_DATA);//Hasil pengurutanprintf("\n\n Hasil Pengurutan Selection Sort: \n\n");tampilkan_larik(data, JUM_DATA);return 0;}

4. Metode Insertion SortPengurutan data dengan penyisipan (Insertion Sort) adalah suatu metode yang melakukan pengurutan dengan cara menyisipkan data yang belum urut ke dalam bagian data yang telah diurutkan. Konsep seperti ini mirip dengan cara orang mengurutkan kartu, selembar demi selembar kartu diambil dan disisipkan (insert) ke tempat yang seharusnya. Pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika ditemukan data yang lebih kecil, maka akan ditempatkan (diinsert) diposisi yang seharusnya. Pada penyisipan elemen, maka elemen-elemen lain akan bergeser ke belakang. Lihat ilustrasi pada Gambar 1.6.

Gambar 1.6 Pengurutan Penyisipan

Contoh Implementasi Insertion SortBerikut ini contoh program dari Insertion Sort untuk melakukan pengurutan sebuah data dalam array satu dimensi.

Algoritma:SUBRUTIN insertion_sort(L, n)FOR k 1 s/d n-1x L[k]// sisipkan x ke dalam L[0..k-1]i k-1ketemu SALAHWHILE (i >= 0 && !ketemu)IF x < L[i] THENL[i+1] L[i]i i +1ELSEketemu BENAREND-IFL[i+1] xEND-WHILEEND-FOREND-SUBRUTIN

Program C++:#include

void tampilkan_larik(int data[], int n){int i;for(i = 0; i < n; i++)printf(" %d ", data[i]);printf("\n");}

void insertion_sort(int data[], int n){int i, k, x;int ketemu;for(k = 1; k < n; k++){x = data[k];//sisipkan x ke dalam data [0...k-1]i= k-1;ketemu=0;while((i>=0)&&(!ketemu)){if(x < data[i]){data[i+1] = data[i];i=i-1;}elseketemu=1;data[i+1] = x;}}}

int main(){const int JUM_DATA = 7;int data[] ={42, 35, 23,11, 28, 26, 17};int i;insertion_sort(data, JUM_DATA);//Hasil pengurutanprintf("\t Metode Selection Sort\n");printf("\n\nHasil Pengurutan Insertion Sort: \n\n");tampilkan_larik(data, JUM_DATA);return 0;}

5. Metode Quick SortMetode quick sort adalah metode pengurutan data yang ditemukan pertama kali oleh C. A. R Hoare pada tahun 1962. Metode ini menggunakan strategi pecah-belah.Proses penukaran dengan metode quick dapat dijelaskan sebagai berikut.: mula-mula dipilih data tertentu yang disebut pivot, misalnya x. Pivot dipilih untuk mengatur data di sebelah kiri agar lebih kecil daripada pivot dan data di sebelah kanan agar lebih besar daripada pivot. Pivot ini diletakkan pada posisi ke j sedemikian sehingga data antara 1 sampai dengan j-1 lebih kecil daripada x. Sedangkan data pada posisi ke j+1 sampai N lebih besar daripada x. Caranya dengan menukarkan data diantara posisi 1 sampai dengan j-1 yang lebih besar daripada x dengan data diantara posisi j+1 sampai dengan N yang lebih kecil daripada x. Lihat ilustrasi pada Gambar 1.7.

Gambar 1.7 Quick sort

Contoh Implementasi Quick SortBerikut ini contoh program dari Quick Sort untuk melakukan pengurutan sebuah data dalam array satu dimensi.

Algoritma:SUBRUTIN quick_sort(L, p, r)IF p < r THENq partisi (L, p, r)quick_sort(L, p, q)quick_sort(L, q+1, r)END-IFEND-SUBRUTIN

Untuk mengurutkan isi keseluruhan larik L, diperlukan pemanggilan seperti berikut.quick_sort(L, 0, jumlah-elemen(L)-1)

Subrutin partisi sendiri sebagai berikut.SUBRUTIN partisi(L, kiri, kanan)pivot L[kanan];i kiri 1FOR j = kiri s/d kanan-1IF L[j] = 0; y-=w) { if(val[y+w] < val[y]) tukar(val[y+w], val[y]); else break; } } }}

int main(){ int nilai[100]; int z, jumlah;

coutjumlah; cout