Untuk
mengimplementasikan algoritma Heap sort pada postingan ane yg ini menggunakan
bahasa pemrograman C#, gunakanlah syntax berikut ini :
using System;
using System.Text;
namespace research
{
class Heap
{
public void HeapSort()
{
Console.Clear();
Console.WriteLine("Masukkan banyak elemen yang anda inginkan : ");
/* Proses validasi input user */
string Input = Console.ReadLine();
int Elements;
if(int.TryParse(Input, out Elements))
{
Elements = Convert.ToInt32(Input);
}
else
{
Console.WriteLine("Maaf anda melakukan input yang salah, silahkan tekan enter untuk mengulangi");
Console.ReadLine();
HeapSort();
}
/* Deklarasi Array Angka */
int[] Angka = new int[Elements];
int Result = Elements;
Console.WriteLine("------------------------------------------------");
/* Input nilai pada elemen-elemen di Array */
for(int i=0; i < Elements; i++)
{
Console.WriteLine("Silahkan masukkan angka untuk mengisi elemen " + i + ":");
string Input_Temp = Console.ReadLine();
int nilai;
if(int.TryParse(Input_Temp, out nilai))
{
Angka[i] = Convert.ToInt32(nilai);
}
else
{
Console.WriteLine("Maaf anda melakukan input yang salah, silahkan tekan enter untuk mengulangi");
Console.ReadLine();
HeapSort();
}
}
/* Menggunakan metode Build_Max_Heap() */
Build_Max_Heap(Angka, Elements);
/* Metode untuk Heap Sort */
for(int i=Elements - 1; i > 0; i--)
{
int Temp = Angka[i];
Angka[i] = Angka[0];
Angka[0] = Temp;
Elements--;
Max_Heapfy(Angka, Elements, 0);
}
/* Metode untuk menampilkan hasil sorting */
Console.WriteLine("---------------------------");
Console.WriteLine("Hasil sorting adalah : ");
for(int i=0; i < Result; i++)
{
Console.WriteLine("{0,1} {1,2}", "Elemen " + i + ":", Angka[i]);
}
}
public void Build_Max_Heap(int[] Angka, int Elements)
{
for(int i=(Elements - 1) / 2; i >= 0; i--)
{
/* Menggunakan metode Max_Heapfy() */
Max_Heapfy(Angka, Elements, i);
}
}
public void Max_Heapfy(int[] Angka, int Elements, int Index)
{
int left = (Index + 1) * 2 - 1;
int right = (Index + 1) * 2;
int largest;
if(left < Elements && Angka[left] > Angka[Index])
{
largest = left;
}
else
{
largest = Index;
}
if(right < Elements && Angka[right] > Angka[largest])
{
largest = right;
}
if(largest != Index)
{
int Temp = Angka[Index];
Angka[Index] = Angka[largest];
Angka[largest] = Temp;
Max_Heapfy(Angka, Elements, largest);
}
}
static void Main(string[] args)
{
Heap H = new Heap();
H.HeapSort();
}
}
}
Pada syntax ini
terdapat 3 metode yang digunakan dalam sorting nilai dengan algortima heap sort
yaitu HeapSort, Build-Max-Heap, dan Max-Heapfy. Pada metode HeapSort di baris 10
sampai 50 adalah metode untuk deklarasi array Angka dan input nilai pada
elemen-elemen yang dimiliki array Angka. Lalu pada baris 51 metode
Build-Max-Heap dipanggil untuk mengkoreksi posisi heap tree agar sesuai dengan
kondisi Max-Heap, pada metode Build-Max-Heap di baris 78 terdapat for looping
dengan kondisi i = (Elements – 1) / 2 dan selama i ≥ 0 for looping akan
terus berulang berarti posisi i berada di tengah-tengah heap tree. Pada posisi i
adalah index awal yang akan dijadikan acuan untuk mengkorekasi posisi heap tree
agar sesuai dengan max-heap setelah index tengah sudah ditemukan maka cara
untuk mengkoreksi posisi heap adalah dengan metode Max-Heapfy.
Pada
metode Max-Heapfy terapat variabel left, right, dan largest. Dimana left dan
right adalah variabel index left dan right child dari node i sedangkan variabel
largest digunakan untuk menentukan index mana yang memiliki nilai tertinggi
antara node i, left child, dan right child node i. Maka pada metode Max-Heapfy
index yang tersimpan dalam variabel largest akan menjadi parent node atau node i,
akan tetapi jika largest ≠ i maka metode Max-Heapfy akan kembali memanggil
dirinya sendiri karena jika largest ≠ I urutan heap tree tidak sesuai dengan
kondisi max-heap.
Lalu setelah Max-Heap sudah terbentuk kembali ke
metode HeapSort dimana terdapat for lopping yang memiliki kondisi i =
Elements – 1 dan selama i > 0 maka i dikurangi 1. Dan
didalam for looping nilai pada index 0 atau root ditukar dengan nilai pada
index n atau index terakhir setelah itu jumlah elemen akan dikurangi 1 dan
metode heapsort memanggil metode metode Max-Heapfy untuk mengkoreksi urutan
heap tree agar sesuai dengan kondisi Max-Heap. Dan berikut adalah demo dari
pengaplikasian metode HeapSort dengan C# :
Sekian postingan dari ane semoga bermanfaat, jika ada kesalahan mohon dikoreksi dan dimaklumai :Peace:
No comments:
Post a Comment