P. 1
Struktur Data [Sorting]

Struktur Data [Sorting]

|Views: 71|Likes:
Dipublikasikan oleh irwananwar.

More info:

Published by: irwananwar. on Oct 01, 2012
Hak Cipta:Attribution Non-commercial

Availability:

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

10/01/2012

pdf

text

2012

Struktur Data

TUGAS PERTEMUAN 3
(SORTING)

IRWAN ANWAR | 5520111125

Tugas 1(Sorting)

1

1.

Quick Sort
Quick Sort adalah algoritma sorting yang terkenal yang dirancang oleh C.A.R. Hoare pada tahun 1960 ketika bekerja untuk perusahaan manufaktur komputer saintifik kecil, Elliott Brothers. Algoritma ini rekursif, dan termasuk paradigma algoritma divide and conquer. 1. Divide Memilih rangkaian data menjadi dua sub-rangkaian A*p...q+ dan A*q+1...r+ dimana setiap elemen A*q+1...r+ ada;ah lebih besar atau sama dengan elemen pada A*q+, A*q+ disebut sebagai elemen pivot. Perhitungan pada elemen q merupakan salah satu bagian dari prosedur pemisah. 2. Conquer Mengurutkan elemen pada sub-rangkaian secara rekursif. Pada algoritma Quick Sort, langkah “kombinasi” tidak dilakukan karena telah terjadi pengurutan elemen-elemen pada sub-array. Algoritma Quick Sort terdiri dari 4 langkah utama:

1. Jika struktur data terdiri dari 1 atau 0 elemen yang harus diurutkan, kembalikan
struktur data itu apa adanya. 2. Ambil sebuah elemen yang akan digunakansebagai pivot point (poin poros). (Biasanya elemen yang paling kiri.) 3. Bagi struktur data menjadi dua bagian – satu dengan elemen-elemen yang lebih besar daripada pivot point, dan yang lainnya dengan elemen-elemen yang lebih kecil dari pada pivot point. 4. Ulangi algoritma secara rekursif terhadap kedua paruh struktur data. Contoh:

Angka yang berwarna merah sebagai pivot.

Tugas 1(Sorting)

2

Program C++
//Program QuickSort #include <iostream> #include <conio> //prosedur input data void InsertData(int numbers*+,int array_size) , int i; for (i=0;i<=array_size-1;i++) , cout << "Data Ke-" << (i+1) << " : "; cin >> numbers*i+; //prosedur output data void ViewData(int numbers*+,int array_size) , int i; cout << "---------------------------\n"; cout << "Hasil Sorting (Ascending):\n"; cout << "----------------------------\n"; for (i=0;i<=array_size-1;i++) , cout << "Data Ke-" << (i+1) << " : " << numbers*i+ <<endl; //prosedur quick sort void quicksort(int numbers*+, int left, int right) , int pivot, l_hold, r_hold; l_hold = left; r_hold = right; pivot = numbers*left+; while(left<right) , while ((numbers*right+>=pivot)&&(left < right)) right--; if (left != right) , numbers*left+ = numbers*right+; left++; -

Tugas 1(Sorting)

3

while((numbers*left+<=pivot)&&(left<right)) left++; if(left != right) , numbers*right+=numbers*left+; right--; numbers*left+=pivot; pivot=left; left=l_hold; right=r_hold; if (left<pivot) , quicksort(numbers,left,pivot-1); if (right>pivot) , quicksort(numbers,pivot+1,right); void main() , int Data*100+, n; cout << " ---Quick Sort---\n"; cout << "----------------------------\n"; cout << "Masukkan Banyak Data : "; cin >> n; cout << "----------------------------\n"; InsertData(Data,n); //memanggil prosedur untuk insert data quicksort(Data,0,n-1); //memanggil prosedur untuk sorting ViewData(Data,n); //memanggil prosedur untuk menampilkan data cout << "----------------------------\n"; cout << "Sorting Selesai\n"; cout << "----------------------------"; getch(); -

2.

Shell Sort
Disebut juga dengan metode pertambahan menurun (diminishing increment). Metode ini dikembangkan oleh Donald L. Shell tahun 1959. Metoda ini memanfaatkan penukaran sepasang elemen untuk mencapai keadaan urut. Dalam hal ini jarak dua elemen yang dibandingkan dan ditukarkan tertentu.

Tugas 1(Sorting)

4

Pada langkah pertama, ambil elemen pertama dan kita bandingkan dengan elemen pada jarak tertentu dari elemen pertama tersebut. Kemudian elemen kedua dibandingkan dengan elemen lain dengan jarak yang sama. Demikian seterusnya sampai seluruh elemen dibandingkan. Pada contoh berikut, proses pertama kali jarak diambil separoh banyaknya elemen yang akan diurutkan. Proses kedua jaraknya diambil separuh jarak yang pertama, dst. Misal terdapat elemen sebagai berikut : 23 45 12 24 56 34 27 23 16

Proses pengurutan menggunakan metoda Shell ada pada tabel di bawah. Dalam hal ini elemen yang ditulis miring adalah elemen yang dibandingkan dan kemudian ditukar, jika perlu.

Tugas 1(Sorting)

5

Program C++
//program sellsort #include<iostream> #include<conio> //prosedut untuk menukar data void tukar(int *a, int *b) , int t=*a; *a=*b; *b=t; //prosedur sellsort void shellsort(int A*+, int size) , int jarak,did_swap,j; jarak=size; while(jarak>0) , jarak=jarak/2; do , did_swap=1; for(j=0;j<size-jarak;j++) , if(A*j+>A*j+jarak+) , tukar(&A*j+,&A*j+jarak+); did_swap=0; - while(did_swap==0); void main() , int i,n=9,data*9+=,12,35,9,11,3,17,23,15,31-;//data array sudah terisi cout<<"-------*Shell Sort+-------\n"; cout<<"\nData Awal:\n\n"; for(i=0;i<n;i++) , cout<<data*i+<<" "; -

Tugas 1(Sorting)

6

//memanggil prosedur shellsort shellsort(data,n); cout<<"\n\nHasil sorting:\n\n"; //pengulangan untuk menampilkan data for(i=0;i<n;i++) , cout<<data*i+<<" "; cout<<"\n--------------------------\n"; getch(); -

3.

Mege Sort
Merge sort merupakan salah satu teknik sorting yang menurutkan suatu data dengan cara penggabungan. Merge sort juga menggunakan proses divide and conquer pada rekursi.Berikut adalah langkah kerja merge sort : 1. Devide Memilah elemen – elemen dari data menjadi dua bagian. Array A dibagi menjadi 2 bagian array , yaitu A1 dan A2. Kalau pembagiannya masih terlalu besar maka masingmasing bagian tadi dibagi menjadi dua bagian lainnya menjadi lebih kecil. 2. Conquer Menyelesaikan setiap bagian dengan memanggil prosedur merge sort secara rekursif. 3. Kombinasi Mengkombinasikan dua bagian tersebut secara rekursif untuk mendapatkan rangkaian data berurutan. Proses rekursi akan berhenti jika telah mencapai lemen dasar, atau artinya jika bagian yang diurutkan menyisakan tepat satu elemen. Sisa pengurutan satu elemen tersebut menandakan bahwa bagian tersebut telah sesuai rangkaian.

Contoh:
Misalkan kita Akan mengurutkan beberapa angka yaitu 38,27,43,3,9,82 dan 10. Maka untuk mengurutkan menggunakan merge-sort langkah-langkahnya seperti gambar dibawah ini.

Tugas 1(Sorting)

7

Program C++
//Program MergeSort #include <iostream> #include <conio.h> void InsertData(int numbers*+,int array_size) , int i; for (i=0;i<=array_size-1;i++) , cout << "Data Ke-" << (i+1) << " : "; cin >> numbers*i+; void ViewData(int numbers*+,int array_size) , int i; cout <<"\nHasil Sorting:\n"; for (i=0;i<=array_size-1;i++) ,

Tugas 1(Sorting)

8

cout << numbers*i+<<" "; void merge(int numbers*+,int temp*+,int left, int mid, int right) , int i, left_end, num_elements, tmp_pos; left_end=mid-1; tmp_pos=left; num_elements=right-left+1; while((left<=left_end)&&(mid<=right)) , if(numbers*left+<=numbers*mid+) , temp*tmp_pos+=numbers*left+; tmp_pos=tmp_pos+1; left=left+1; else , temp*tmp_pos+=numbers*mid+; tmp_pos=tmp_pos+1; mid=mid+1; while(left<=left_end) , temp*tmp_pos+=numbers*left+; left=left+1; tmp_pos=tmp_pos+1; while(mid<=right) , temp*tmp_pos+=numbers*mid+; mid=mid+1; tmp_pos=tmp_pos+1; for (i=0;i<=num_elements;i++) , numbers*right+=temp*right+; right=right-1; -

Tugas 1(Sorting)

9

void m_sort(int numbers*+, int temp*+, int left, int right) , int mid; if (right>left) , mid=(right+left)/2; m_sort(numbers, temp, left, mid); m_sort(numbers, temp, mid+1, right); merge(numbers, temp, left, mid+1, right); void MergeSort(int numbers*+, int temp*+, int array_size) , m_sort(numbers, temp, 0, array_size-1); void main() , int Data*10+,S*10+,n; cout << " ===*Merge Sort+===\n\n"; cout << "Banyak data yang akan disorting: "; cin>>n; InsertData(Data,n); MergeSort(Data,S,n); ViewData(Data,n); cout << "\n\nSorting Selesai"; getch(); -

You're Reading a Free Preview

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