Heap Sort adalah metode dengan mengurutkan dengan memanfaatkan sifat yang dimiliki oleh struktur data heap. Heap adalah suatu strutur data berbentuk pohon biner (binary tree) dimana root dari tree tersebut adalah nilai tertinggi, dan nilai dari parent selalu lebih tinggi dari nilai child. Ketika suatu array dengan urutan acak ingin dibuat bentuk heapnya, maka diperlukan fungsi untuk pembentukan heapify pada setiap elemen non leaf.
Script:
#include<iostream>
using namespace std;
void tukar(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
void heapify(int val[], int left, int right, char o)
{
int temp, idx;
temp = val[right];
idx = right * 2 + 1;
if(o == 'A')
{
if ((idx < left) && (val[idx] < val[idx+1]))
idx++;
while ((idx <= left) && (val[idx] > temp))
{
val[right] = val[idx];
right = idx;
idx = idx * 2 + 1;
if ((idx < left) && (val[idx] < val[idx+1]))
idx++;
}
}
else if(o == 'D')
{
if ((idx < left) && (val[idx] > val[idx+1]))
idx++;
while ((idx <= left) && (val[idx] < temp))
{
val[right] = val[idx];
right = idx;
idx = idx * 2 + 1;
if ((idx < left) && (val[idx] > val[idx+1]))
idx++;
}
}
val[right] = temp;
}
void heapsort(int val[], int n, char o)
{
for (int x = n / 2 - 1; x >= 0; x--)
{
heapify(val, n - 1, x, o);
}
for (int y = n - 1; y > 0; y--)
{
tukar(val[0], val[y]);
heapify(val, y - 1, 0, o);
}
}
int main()
{
char urut;
int nilai[100];
int z, jumlah;
cout<<"Jumlah Data : ";
cin>>jumlah;
cout<<"Urut [A/D] : ";
cin>>urut;
cout<<"--------------------------------\n";
for(z = 0; z < jumlah; z++)
{
cout<<"Nilai ke-"<<1 + z<<" : ";
cin>>nilai[z];
}
heapsort(nilai, jumlah, urut);
cout<<"--------------------------------\n";
cout<<" HASIL SORTIR \n";
cout<<"--------------------------------\n";
for(z = 0; z < jumlah; z++)
{
cout<<nilai[z]<<" ";
}
return 0;
}
No comments:
Post a Comment