Pages

C++: Heap Sort

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;
}

Zhuel Rainz

Rainz Code adalah blog berisi tutorial, script, atau project dari berbagai macam bahasa pemrograman yan diharapkan bisa membantu pembaca untuk belajar pemrograman, membuat tugas, skripsi, atau bahkan membuat aplikasi yang bisa menghasilkan uang. Khusus untuk source code, silahkan email atau hubungi penulis melalui link-link yang sudah tersedia di bawah ini.

No comments:

Post a Comment