P. 1
Struktur Data : Teknik Sorting

Struktur Data : Teknik Sorting

|Views: 87|Likes:
Published by darkagent29
Berbagai teknik sorting menggunakan C++
Berbagai teknik sorting menggunakan C++

More info:

Published by: darkagent29 on Nov 02, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

06/12/2013

pdf

text

original

TEKNIK SORTING Disusun oleh : Arbiyan Tezar Kumbara

PENDAHULUAN Setiap permasalahan yang dihadapi dalam bidang informatika dan komputasi memiliki metode tertentu untuk menyelesaikannya. Seiring berkembangnya kemajuan di bidang tersebut, tuntutan untuk menemukan metode pemecahan masalah secara lebih tepat, cepat efektif dan efisien seta kuat menjadi sebuah kebutuhan, terutama untuk permasalahan klasik. Salah satu masalah klasik di bidang tersebut adalah pengurutan data (sorting). Pengurutan data (sorting) memegang peranan penting dalam banyak aplikasi dan persoalan yang mengacu pada banyak data (minimal lebih dari satu), dan seringkali menjadi upa-masalah yang banyak dipertimbangkan agar keseluruhan permasalahan dapat diselesaikan dengan lebih baik dan cepat. Algoritma pengurutan (sorting) yang banyak digunakan umumnya menggunakan metode pemecahan brute force atau divide and conquer. Secara brute force , algoritma pengurutan (sorting) yang dipakai adalah algoritma bubble sort. Secara devide and conquer, algoritma yang digunakan contohnya adalah merge sort, insertion sort,selection sort, dan quick sort. Pada makalah ini akan dipaparkan penjelasan singkat dan perbandingan kecepatan dan kemangkusan algoritmaalgoritma pengurutan data dengan elemen integer. METODE SORTING

Sorting bisa didefinisikan sebagai suatu proses pengurutan data yang sebelumnya disusun secara acak sehingga menjadi tersusun secara teratur menurut suatu aturan tertentu. Sorting yang kita terapkan menggunakan tipe data array agar pemahaman serta pengimplementasiannya lebih mudah. Pada umumnya terdapat dua jenis pengurutan : 1.Ascending (Naik). 2.Descending (Turun). Contoh : Data : Array [1..6] of Byte = (22, 10, 15, 3, 8, 2); Data Acak : 22 10 15 3 8 2 Terurut Ascending : 2 3 8 10 15 22 Terurut Descending : 22 15 10 8 3 2 Untuk melakukan proses pengurutan tersebut dapat digunakan berbagai macam cara/metode. Metode Yang akan di bahas adalah : 1.Selection Sort (Metode Maksimum / minimum) 2.Buble Sort Method (Brute Force method) 3.Radix Method 1.SELECTION SORT METHOD

Contoh kode dalam C++ : #include <iostream.h> #include <conio.h> #include <iomanip.h> int main() { //deklarasi array dengan 6 elemen int A[6]; int j,k,i,temp; int jmax,u=5; //memasukkan nilai sebelum diurutkan cout<<"Masukkan nilai pada elemen array :"<<endl; for(i=0;i<6;i++) { cout<<"A["<<i<<"]="; cin>>A[i]; } //Proses pengurutan secara menaik (Ascending) for(j=0;j<6;j++) { jmax=0; for(k=1;k<=u;k++) if (A[k] > A[jmax])//untuk mengubah menjadi descending ubah menjadi A[k]<A[jmax] jmax=k; temp=A[u]; A[u]=A[jmax]; A[jmax]=temp; u--; } //menampilkan nilai setelah diurutkan cout<<"\nNilai setelah diurutkan ="<<endl; for(i=0;i<6;i++) cout<<A[i]<<" "; getch(); }

Algoritma dan penjelasan :

Cara kerja metode ini didasarkan pada pencarian elemen dengan nilai terkecil, kemudian dilakukan penukaran dengan elemen ke-I. Secara singkat, metode ini bisa dijelaskan sebagai berikut. Pada langkah pertama, dicari data yang terkecil dari data pertama sampai data terakhir. Kemudian data tersebut kita tukar dengan data pertama. Dengan demikian, data pertama sekarang mempunyai nilai paling kecil dibanding data lain. Pada langkah kedua, data terkecil kita cari mulai dari data kedua sampai data terakhir. Data terkecil yang kita peroleh kita tukar dengan data kedua. Demikian seterusnya sampai suluruh data terurut. A[ i ] A[2]

Iterasi Ke Awal J=0, K=4 J=1, K=3 J=2, K=5 J=3, K=3 J=4, K=5 Akhir

A[0] 22 2 2 2 2 2 2

A[1] 10 10 3 3 3 3 3

A[3] 3 3 10 10 10 10 10

A[4] 2 22 22 22 22 15 15

A[5] 8 8 8 15 15 22 22

15 15 15 8 8 8 8

2.Buble Sort Method (Brute force method) Contoh kode dalam C++ : #include <stdio.h> #include <conio.h> #include <iostream.h> #include <stdlib.h> main() { system("title Buble_sort"); int i,k,temp; int L[6]={22, 10, 15, 3, 2, 8}; //Menampilkan Data sebelum sorting cout<<"Data sebelum di sorting : "; for(i=0; i<6; i++) { cout<<L[i]<<" "; } //Proses secara Ascending(naik) for(i=0;i<=5;i++) for(k=0;k<=5;k++) if(L[k]<L[k-1]) { temp=L[k]; L[k]=L[k-1];

L[k-1]=temp; } cout<<"\nData setelah Sorting : "; for(i=0;i<=5;i++) cout<<L[i]<<" "; getch(); }

Penjelasan dan Algoritma : Konsep dasar dari Bubble sort ialah membandingkan elemen yang sekarang degan elemen yang berikutnya, jika elemen sekarang > elemen berikutnya (untuk ascending), maka dilakukan proses penukaran. Proses sorting dapat dimulai dari data awal atau data akhir.

Iterasi Ke
Awal

L[0] 22 10 10 10 10 10

L[1] 10 22 15 15 15 15 15 3 3 3 3 10 2 2 2 2 3

L[2] 15 15 22 3 3 3 3 15 2 2 2 2 10 8 8 8 8

L[3] 3 3 3 22 2 2 2 2 15 8 8 8 8 10 10 10 10

L[4] 2 2 2 2 22 8 8 8 8 15 15 15 15 15 15 15 15

L[5] 8 8 8 8 8 22 22 22 22 22 22 22 22 22 22 22 22

1

2

10 10 10 10 10

3

3 3 3 3 3

4

2

2 2 2 2 5 2 2 2 2 2 Akhir 2

3 3 3 3 3 3 3 3 3 3

8 8 8 8 8 8 8 8 8 8

10 10 10 10 10 10 10 10 10 10

15 15 15 15 15 15 15 15 15 15

22 22 22 22 22 22 22 22 22 22

Dari tabel di atas terlihat ketidak efisienan dari bubble sort yaitu harus menyelesaikan K–1 dari data. Sedangkan jika kita melihat dari tabel diatas pada iterasi ke empat saja data sudah terurut dan seharusnya pada saat itu proses sudah berhenti, tapi dengan bubble sort proses harus dilakukan sampai looping selesai. 3.Radix Method Contoh kode dalam C++ : #include <iostream> #include <vector> #include <math.h> #include<cstdlib> using namespace std; void printSorted(int x[], int length); vector < vector <int> > buckets; void radixSort(int x[],int length) { int temp; int m=0; int max=x[0]; // storing maximum of the array in max variable for(int i=0; i< length; i++) if(max < x[i]) max = x[i]; // the obtained maximum decides the number of times the for loop below iterates //Begin Radix Sort for(int i=0; max!=0; max=max/10,i++)

{ //Determine which bucket each element should enter for(int j=0;j<length;j++) { temp=(int)((x[j])/pow(10,i))%10; buckets[temp].push_back((x[j])); } //Transfer results of buckets back into main array for(int k=0;k<10;k++) { for(int l=0;l<buckets[k].size();l++) { x[m]=buckets[k][l]; m++; } //Clear previous bucket buckets[k].clear(); } m=0; } buckets.clear(); printSorted(x,length); cout<<"\nAbove is the sorted list.\n"; cout<<"Tekan tombol atau karakter apapun untuk keluar!\n"; cin>>temp; } void printSorted(int x[], int length) { cout<<"Sorted List :: \n"; for(int i=0;i<length;i++) cout<<x[i]<<endl; } int main() { system("title Radix_sort"); int total_number_of_elements; cout<<"Masukkan banyaknya angka yang ingin dimasukkan\n"; cin>>total_number_of_elements; int input[total_number_of_elements]; buckets.resize(10); int number; for(int i=0;i<total_number_of_elements;i++) { cout<<"A["<<i<<"] = "; cin>>number; input[i]=number; } radixSort(input,total_number_of_elements);

return 0; }

Algoritma dan Penjelasan : Radix Sorting adalah metode sorting yang ajaib yang mana mengatur pengurutan nilai tanpa melakukan beberapa perbandingan pada data yang dimasukkan. Secara harfiah, radix dapat diartikan sebagai posisi dalam angka. Pada sistem desimal, radix adalah digit dalam angka desimal. Seperti contoh, angka “42” mempunyai 2 digit yaitu 4 dan 2. Radix Sort memperoleh namanya dari digit-digit tersebut, karena metode ini pertama kalinya mengurutkan nilai-nilai input berdasarkan radix pertamanya, lalu pengurutan dilakukan berdasarkan radix keduanya, begitu seterusnya. Contoh dalam implementasi bilangan bit : Data yang belum terurut adalah 22, 10, 15, 3, 2, dan 8

0 22 10 15 [0]3 [0]2 [0]8

1 10 [0]2 22 [0]3 15 [0]8

2 [0]2 [0]3 [0]8 10 15 22

Stelah dilakukan pengecekan antar bit maka hasil stelah di sorting adalah 2, 3, 8, 10, 15 dan 22 KESIMPULAN

Tiap algoritma sorting di atas memiliki kelebihan dan kekurangannya masing masing : A.Selection Sort Kelebihan : 1.Kompleksitas selection sort relatif lebih kecil 2.Lebih baik dari metode buble sort 3.Cepat 4.Membutuhkan langkah yang lebih sedikit ketimbang buble sort Kelemahan : 1.Membutuhkan metode tambahan B.Buble Sort Kelebihan : 1.Algoritmanya sederhana dan mudah di pahami 2.Metode paling sederhana Kelemahan : 1.Sangat Lambat dalam melakukan penyortiran 2.Tidak efisien karena walupun data sudah terurut ia masih terus melakukan looping sampai selesai. C.Radix Kelebihan : 1.Metodenya simpel 2.Cepat 3.Mudah dan efektif Kelemahan : 1.Algoritma ini memiliki batasan di mana pada kasus kasus tertentu tidak dapat dilakukan dengan algoritma ini, seperti pengurutan bilangan pecahan, bilangan negatif, adanya kompleksitas bit dan word sehingga metode ini lebih cocok untuk tipe data integer.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->