Anda di halaman 1dari 14

MAKALAH STRUKTUR DATA

HEAP SORT
Disusun Oleh :

1.
2.
3.
4.
5.

Dana Ananda N.
Hanif Aulia
Hartini Indriani
Rizki Afriani
Ade Widyatama Dian B.

1515015003
1515015012
1515015025
1515015033
1515015042

JURUSAN TEKNIK INFORMATIKA


Up. FAKULTAS TEKNOLOGI INFORMASI DAN KOMUNIKASI
UNIVERSITAS MULAWARMAN
2016

DAFTAR ISI
1

KATA PENGANTAR.....................................................................................................

DAFTAR ISI...................................................................................................................

ii

BAB I. PENDAHULUAN
1.1 Latar Belakang.............................................................................................

1.2 Rumusan Masalah........................................................................................

1.3 Tujuan Penulisan..........................................................................................

BAB II. PEMBAHASAN


2.1 Definisi Heap Sort........................................................................................

2.2 Ilustrasi Heap Sort........................................................................................

2.3 Algoritma Heap Sort....................................................................................

2.4 Source Code..................................................................................................

2.5 Screen Capture Program...............................................................................

11

BAB III. PENUTUP


3.1 Kesimpulan...................................................................................................

12

3.2 Saran.............................................................................................................

12

DAFTAR PUSTAKA......................................................................................................

iii

BAB I
PENDAHULUAN
1.1 Latar Belakang
Untuk memecahkan masalah pengurutan dalam membangun suatu program aplikasi,
dibutuhkan algoritma pengurutan. Di dalam bidang Teknik Informatika terdapat banyak
sekali jenis-jenis algoritma pengurutan yang dapat digunakan untuk memecahkan
masalah pengurutan. Pengurutan data (data sorting) merupakan bagian dari pengolahan
data informasi. Dari data-data yang telah didapat, ada kalanya data tersebut harus
diurutkan terlebih dahulu berdasarkan aturan yang lebih dulu ditentukan. Berdasarkan
nilai maupun alphabet misalnya. Metode-metode pengurutan data pun ada berbagai jenis.
Mulai dari binary sort, insertion sort, merge sort, heap sort dll. Penggunaan metode mana
yang akan dipakai nantinya tergantung dari jenis maupun kuantitas data yang diolah.
Heap sort, algoritma pengurutan, merupakan salah satu metode pengurutan yang sering
digunakan. Melalui jurnal ini akan dibahas teknik pencarian ini beserta kelebihan dan
kekurangannya. Oleh karena itu, teknik untuk memilih algoritma pengurutan yang tepat,
sesuai dengan kebutuhan, dan mangkus sangat diperlukan karena masing-masing
algoritma pengurutan memiliki karakteristik yang berbedabeda. Heap sort merupakan
salah satu contoh algoritma pengurutan yang memiliki kompleksitas waktu asimptotik
terbaik serta menerapkan teknik yang unik/khas di dalam memecahkan masalah
pengurutan, yaitu dengan menggunakan heap tree.

1.2 Rumusan Masalah


Dari latar belakang diatas, maka terdapat rumusan masalah sebagai berikut :
1. Apa yang di maksud dengan heap sort ?
2. Bagaimana ilustrasi dari metode pengurutan Heap Sort ?
3. Bagaimana implementasi dalam program menggunakan Heap Sort?

1.3 Tujuan Masalah


Adapun tujuan makalah sebagai berikut :
1. Menjelaskan pengertian dari heap sort.
2. Mendeskripsikan ilustrasi dari metode pengurutan Heap sort.
3. Menjelaskan implementasi dalam program menggunakan Heap Sort.

BAB II
1

PEMBAHASAN
2.1

Definisi Heap Sort


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. 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 min-heap 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.
Dan untuk memvisualisasikan sebuah array menjadi sebuah heap tree
adalah dengan cara mencari node root terlebih dahulu yaitu node pertama node
2

pertama sebuah heap tree adalah index pertama di array yaitu index 0 akan
tetapi pada heap tree node awal berada di posisi 1 berbeda dengan array yang
memiliki index awal yaitu index 0. Setelah node root telah ditemukan maka
sekarang tinggal mencari child node dari node root dan child node terbagi
menjadi 2 yaitu left child dan right child dan untuk mencari left child, right
child, dan parent digunakan rumus sebagai berikut :

Left Child: 2i (Contoh : Left child dari 1 adalah 2 x 1 = 2)


Right Child
: 2i + 1 (Contoh : Right Child dari 1 adalah (2 x 1) + 1 =
Parent
: i/2 (Contoh : Parent dari 3 adalah 3 / 2 = 1 )

NB : Untuk i adalah posisi node yang ingin dicari left/right childnya atau parent
nodenya dan untuk lambing ( ) adalah floor yaitu pembulatan kebawah missal
3 / 2 = 1,5 dibulatkan kebawah menjadi 1.

2.2Ilustrasi Heap Sort


Contoh : Kita memiliki sebuah aray A = A B C D dan diproses menggunakan
heap sort menggunakan metode descending. Discending adalah proses
mengurutkan dari yang terbesar ke yang terkecil.
Prosedur BUILD-MAX-HEAP dimulai dari Array [A.length/2] yang
merupakan node dengan indeks terbesar yang memiliki anak, sampai berakhir
pada node pertama A[1]. Fungsinya untuk memastikan bahwa semua node
memiliki anak yang nilainya tidak lebih besar dari node tersebut. Iterasi dilakukan
dari node terbesar [A.length/2] ke node terkecil A[1] untuk memastikan bahwa
semua subtree dari anak sudah merupakan max-heap.

Algoritma Heap Sort dimulai dengan prosedur BUILD-MAX-HEAP untuk


membangun max-heap pada array yang telah dimasukkan A[1 n] dimana
n=A.length. Elemen terbesar array disimpan di akar A[1], dimana A[1] ditetapkan
sebagai posisi final, sehingga dapat ditukar dengan A[n]. Apabila node n dari heap
dihilangkan dan A.heap-size akan semakin berkurang. Anak dari akar memenuhi
ketentuan max-heap. Namn, elemen akar yang baru mungkin tidak memenuhi syarat
max-heap. Untuk itu, diperlukan pemenuhan sifat max-heap yang disebut MAXHEAPIFY(A,1) dimana menghasilkan sebuah max-heap A[1 . . n-1]. Algoritma heap
sort mengulangi proses untuk max heap n-1 turun hingga heap-size 2.

Operasi heap sort setelah baris 1 untuk mencari nilai max-heap

Heapify

#included "stdio.h"
B

#include "conio.h"

C
B

A
A

void manage(int *, int);


void heapsort(int *, int, int);
void manage(char *arr, int i)
2.3Algoritma
Heap Sort
{Langkah :

1. Masukkan jumlah data

2. tmp;
Masukkan data setiap elemen
char
3. Buat heap tree

tmp=arr[i];
4. Tukarkan elemen ke-1 pada Heap Tree dengan elemen tersebut

5. Simpan elemen terakhir

while((i>1)&&(arr[i/2]<tmp))
6. Hapus jumlah data ( jumlah data -1)
{

7. Ulangi sampai semua tersimpan


8. Tampilkan data secara descanding

arr[i]=arr[i/2];
i=i/2;
}
arr[i]=tmp;
}
void heapsort(char *arr, int i, int size)

2.4Source Code
{
int tmp,j;
tmp=arr[i];
j=i*2;

while(j<=size)
{
if((j<size)&&(arr[j]<arr[j+1]))
j++;
if(arr[j]<arr[j/2])
break;

arr[j/2]=arr[j];
j=j*2;}
arr[j/2]=tmp;
}
main()
{
int i,j,size,tmp,k;
char arr[20];
printf("\n\t------- Heap sorting method -------\n\n");
printf("Enter the number of elements to sort : ");
scanf("%d",&size); fflush(stdin);
for(i=1; i<=size; i++)
{
printf("Enter %d element : ",i);
scanf("%c",&arr[i]);fflush(stdin);
manage(arr,i);
}
j=size;
for(i=1; i<=j; i++)
{
tmp=arr[1];
arr[1]=arr[size];
arr[size]=tmp;
size--;
heapsort(arr,1,size);
}

printf("\n\t------- Heap sorted elements -------\n\n");


size=j;
for(i=size; i>=1; i--)
printf("%c ",arr[i]);
getch();
return 0;}

2.5Screen Capture Program

10

BAB III
KESIMPULAN DAN SARAN

3.1Kesimpulan
Algoritma pengurutan heap sort dapat digunakan untuk menyelesaikan masalahmasalah pengurutan dalam membangun suatu program aplikasi dengan mangkus.
Keunggulan algoritma pengurutan heap sort terletak pada kompleksitas waktu
asimptotiknya yang sangat baik. Meskipun lebih lambat dari algoritma pengurutan data
yang lain, algoritma heap sort memiliki kelebihan ketika menangani data dalam skala
yang besar/massive. Karena algoritma ini memiliki kelebihan tidak menggunakan banyak
11

tabel, tetapi hanya satu tabel yang dipakai untuk menyimpan hasil dari pengurutan
tersebut.

3.2Saran
Kami mengharapkan agar kita semua mampu memahami pengurutan data
menggunakan metode Heap Sort dan tanpa merasa bingung mengenai bagaimana cara
atau langkah awal pengurutannya. Serta penulis mengharapkan semoga makalah ini
menjadi pedoman atau bahkan menambah wawasan dan pengetahuan mahasiswa maupun
pembaca pada umumnya.

DAFTAR PUSTAKA
http://www.cse.iitk.ac.in/users/dsrkg/cs210/applets/sortingII/heapSort/heap.html.
Diakses tanggal 2 Maret 2016 pukul 16.30 WITA
http://www.cs.ui.ac.id/kuliah/IKI10100/1998/handout/handout15.html.
Diakses tanggal 2 Maret 2016 pukul 17.00 WITA
http://nurfitrianti-23.blogspot.co.id/2012/08/ascending-dan-descending.html
Diakses tanggal 2 Maret 2016 pukul 19.00 WITA
http://artofartikel.blogspot.co.id/2012/06/heap-sort.html
Diakses tanggal 5 Maret 2016 pukul 09.30 WITA

12