JUDUL : QUICK SORT dan HEAP SORT
Nama
: Crystal Jelita Lumban Tobing
NIM
: 150504009
Unit
: 01
FAKULTAS TEKNIK PRODI TEKNIK INFORMATIKA UNIVERSITAS SAMUDRA 2015
Quick sort merupakan Algoritma Sorting yang dikembangkan oleh Tony Hoare yang, secara kasus rata-rata, membuat pengurutan O(n log n) untuk mengurutkan n item. Algoritma ini juga dikenal sebagai Partition-Exchange Sort atau disebut sebagai Sorting Pergantian Pembagi. Pada kasus terburuknya, algoritma ini membuat perbandingan O(n2), malaupun kejadian seperti ini sangat langka. Quicksort sering lebih cepat dalam praktiknya daripada algoritma O(n log n) yang lainnya.[1] Dan juga, urutan dan referensi lokalisasi memori quicksort bekerja lebih baik dengan menggunakan cache CPU, jadi keseluruhan sorting dapat dilakukan hanya dengan ruang tambahan O(log n).[2]Quicksort merupakan sorting pembanding dan pada implementasi efisien tidak merupakan algoritma sorting yang stabil. Quick sort merupakan Algoritma Pembagi. Pertama sekali quicksort membagi list yang besar menjadi dua buah sub list yang lebih kecil: element kecil dan element besar. Quicksort kemudian dapat menyortir sub list itu secara rekursif. Langkah-Langkah pengerjaannya ialah: 1. Ambil sebuah elemen, yang disebut dengan pivot, pada sebuah daftar. 2. Urutkan kembali sebuah list sehingga elemen dengan nilai yang kecil dari pivot berada sebelum pivot, sedangkan seluruh element yang memiliki nilai yang lebih besar dari pivot berada setelahnya (nilai yang sama dapat berada pada pivot setelahnya). Setelah pemisahan, pivot berada pada posisi akhirnya. Operasi ini disebut Partition. 3. Sub list kemudian disortir secara recursif dari elemen yang lebih kecil dan sub list dari elemen yang lebih besar. Kasus dasar dari rekusrif ialah list dari besaran nol atau satu, yang tidak perlu untuk di sorting. Perlu diperhatikan bahwa kita hanya memeriksa elemen dengan membandingkan mereka pada elemen yang lain. Prosedur ini disebut Sorting Pembandingan. Jenis ini juga merupakan jenis sorting yang stabil (asumsikan bahwa untuk setiap method menerima elemen pada urutan aslinya dan pivot yang dipilih merupakan elemen terakhir dari nilai yang sama). Kebenaran dari algoritma partisi didasari pada dua argumen berikut:
Pada setiap iterasi, seluruh elemen diproses selama ini berada pada posisi yang diinginkan: sebelum pivot lebih kurang dari nilai pivot, setelah pivot lebih besar dari nilai pivot (Invarian Loop).
Kebenaran dari keseluruhan algortima dapat dibuktikan dengan penyederhanaan fakta: untuk elemen nol atau satu, algoritma tidak akan mengubah data; untuk jumlah data yang lebih besar, algoritma akan menghasilkan dua bagian, elemen yang kurang dari pivot dan elemen yang lebih besar dari nya, data ini sendiri akan diurutkan secara hipotesa rekursif. Metode Pengurutan Quick Sort
Contoh keseluruhan dari quicksort pada kumpulan acak dari angka. Element yang gelap merupakan pivot. Pivot selalu dipilih sebagai element terakhir pada partisi. Bagaimanapun, selalu memilih elemen terakhir pada partisi sebagai pivot sehingga hasil pada kasus terburuk ( ) pada daftar yang telah diurutkan, atau daftar yang serupa. Karena elemen yang sama memotong hingga pada akhir dari prosedur soring pada jumlah yang besar, versi dari algoritma quicksort yang memilih pivot sebagai elemen tengah berjalan lebih cepat daripada algortima yang dijelaskan pada diagram ini pada sejumlah besar angka.
Partisi ditepat bekerja pada daftar yang kecil. Elemen kotak merupakan element pivot, elemen berwarna biru merupakan elemen yang bernilai kecil atau sama, dan elemen yang berwarna merah lebih besar.
Kelebihan Algoritma Quicksort memiliki kompleksitas O(n log n) dimana pada prakteknya lebih cepat dari algoritma pengurutan lainnya.
Kekurangan Pada kemungkinan terburuknya, algoritma Quicksort ini dapat memiliki kompleksitas O(n2). Meskipun ini sangat langka terjadi
Kesimpulan : Quick Sort merupakan suatu algoritma pengurutan data yang menggunakan teknik pemecahan data menjadi partisi-partisi, sehingga metode ini disebut juga dengan nama partition exchange sort. Quick Sort merupakan salah satu algoritma pengurutan data yang menggunakan teknik membagi data menjadi partisi-partisi. Metode Quick Sort disebut juga dengan nama partition exchange sort.
Contoh Program Quick Sort : #include #include #define max 20 using namespace std ; void quick_sort(int darr[max], int lb, int ub) { int a; int up,down; int temp; if (lb>=ub) return; a=darr[lb]; up=ub; down=lb; while (down < up) { while (darr[down] <= a) down++; while (darr[up]>a) up--; if(down>n; ub=n; cout<<"Masukkan data-datanya: \n\n"; for(i=1;i<=n;i++) { cout<<"\tdata ke- "<>arr[i]; } quick_sort(arr,lb,ub); cout<<"\nHasil pengurutan data: "; for(i=0; i
Hasil Outputnya :
Heap sort adalah sebuah metode sorting (pengurutan) angka pada sebuah array dengan cara menyerupai binary tree, yaitu dengan cara memvisualisasikan sebuah array menjadi sebuah binary tree yang nantinya pada binary tree tersebut nilai pada masing-masing index array akan diurutkan. Pada heap sort terdapat 3 bagian yaitu Node, Edge, dan leaf dimana node itu adalah setiap index yang berada pada array, edge adalah garis yang menghubungkan tiap node dan leaf adalah setiap node yang tidak memiliki child node (node turunan). Selain itu juga ada yang bernama root yaitu node awal pada sebuah heap, berikut adalah ilustrasi dari bagian yang dimiliki oleh heap :
Heap tree terbagi menjadi 2 jenis yaitu Max-Heap dan Min-Heap, dimana max-heap adalah kondisi heap tree yang memiliki nilai tertinggi berada di node root dan setiap child node memiliki nilai yang lebih kecil dari nilai yang dimiliki parent nodenya. Sedangkan pada minheap adalah kondisi kebalikan dengan max-heap, pada min-heap nilai terkecil berada di node root dan setiap child node memiliki nilai yang lebih besar dari nilai yang dimiliki parent nodenya. Pada metode heap sort jenis heap tree yang digunakan adalah Max-Heap. Contoh : Kita memiliki sebuah aray A = 4, 1, 3, 2, 16, 9, 10, 14, 8, 7. Dan untuk memvisualisasikan array tersebut gunakan rumus yang sudah disediakan dan prosesnya akan terlihat seperti ini :
Dan hasil heap treenya adalah sebagai berikut :
Akan tetapi pada max-heap kondisi heap tree adalah node dengan nilai tertinggi adalah root dan setiap parent node memiliki nilai yang lebih besar dari child nodenya, dan heap tree yang terbentuk dari array A tidak memenuhi kondisi max-heap oleh karena itu dibutuhkan metode untuk membuat heap tree tersebut memiliki kondisi max-heap. Dalam metode sorting heap sort terdapat 2 metode yang digunakan yaitu Build-Max-Heap dan Max-Heapfy, Build-Max-Heap adalah metode yang digunakan untuk membuat heap tree diatas memenuhi kondisi dari maxheap, berikut ini adalah ilustrasi penggunaan metode HeapSort, Build-Max-Heap, dan MaxHeapfy pada sebuah heap tree : Setelah proses Build-Max-Heap telah selesai baru lah kita dapat menggunakan metode HeapSort untuk mengurutkan nilai pada array A. Pada algoritma heapsort setelah melakukan algoritma Build-Max-Heap nilai pada index terakhir i akan ditukar dengan node 1 atau root selama i > 0 disini nilai 16 akan ditukar dengan 1 dan jumlah elemen akan dikurangi 1 akan tetapi setelah perkukaran posisi dilakukan tree heap tidak memenuhi kondisi Max-Heap maka algoritma MaxHeapfy digunakan dan ilustrasinya adalah sebagai berikut :
Sampai pada tahap ini nilai tertinggi sudah berada di index yang benar index terakhir 10 pada heap tree dan 9 di array, langkah selanjutnya adalah mengulang cara yang sama dengan for looping selama i > 0. Berikut adalah ilustrasi lengkapnya :
Maka setelah algoritma HeapSort dilakukan nilai-nilai pada array akan terurut dari nilai terkecil sampai terbesar. A = 1, 2, 3, 4, 7, 8, 9, 10, 14, 16. Dan berikut adalah flowchart untuk algoritma Heapsort :
Contoh Program Heap sort #include using namespace std; int main(){ int data[100]; int temp,i,j,n; cout<< "Berapa data yang ingin anda urutkan!!!";
cin>>n; cout<>data[i];
} cout<temp && j>=0) { data[j+1] = data[j]; j++; } data[j+1] = temp; } for (i=0;i
Hasil Outputnya :