Untuk mempelajari Heap Sorting, Anda harus terlebih dahulu memahami konsep Heap. Ini dapat diperkirakan sebagai metode penyimpanan array sebagai pohon biner yang sepenuhnya. Tetapi ada properti lain dengannya, yang mirip dengan pohon penyortiran biner. Ada perbedaan antara tumpukan terbesar dan tumpukan terkecil. dari simpul anaknya. Heap Sorting umumnya menggunakan tumpukan terbesar, sedangkan tumpukan terkecil dapat membangun antrian prioritas. Ada metode dalam tumpukan yang digunakan untuk mempertahankan sifat -sifat heap, yang merupakan metode maxheap dalam kode kami di bawah ini. array, dan parameter kedua adalah menyesuaikan heap. Elemen yang valid sebenarnya disimpan di tumpukan. Mungkin panjang array adalah jumlah elemen yang sebenarnya disimpan di tumpukan, tetapi tidak harus semua data yang kita butuhkan untuk membangun tumpukan maksimum. Pengantar algoritma mengatakan bahwa sub-node kiri adalah 2xi, tetapi array kami dihitung dari 0, sehingga sub-node kiri menjadi 2xi+1. 2 adalah, node anak dari titik -titik ini semuanya adalah node daun, jadi kami membangun tumpukan maksimum dengan menyortirnya dari bawah ke atas. Pastikan semua node di tumpukan kami memenuhi properti tumpukan maksimum. Akhirnya, Heap Sorting adalah untuk mengeluarkan simpul pertama, mengurutkan node yang tersisa lagi, dan kemudian mengeluarkan node root. Ini memastikan bahwa setiap kali kita mengeluarkannya, itu adalah nilai maksimum.
Salinan kode adalah sebagai berikut:
heapsort kelas publik {
private int getLeft (int i) {
return 2*i+1;
}
private int getRight (int i) {
return 2*i+2;
}
public void maxheap (int [] heap, int loc, int int) {
int l = getLeft (loc);
int r = getRight (loc);
int terbesar = loc;
if (l <size && heap [l]> heap [loc]) {
Terbesar = l;
}
if (r <size && heap [r]> heap [terbesar]) {
Terbesar = r;
}
if (terbesar! = loc) {
int cache = heap [loc];
heap [loc] = heap [terbesar];
heap [terbesar] = cache;
Maxheap (tumpukan, besar, ukuran);
}
}
public void buildheap (int [] heap) {
untuk (int i = heap.length/2; i> = 0; i-) {
maxheap (heap, i, heap.length);
}
}
public void sort (int [] heap) {
buildheap (heap);
untuk (int i = heap.length-1; i> 1; i-) {
int cache = heap [0];
heap [0] = heap [i];
heap [i] = cache;
maxheap (heap, 0, i);
}
int cache = heap [0];
heap [0] = heap [1];
heap [1] = cache;
}
public static void main (string [] args) {
int [] heap = int new [] {4,1,5,3,7,12,65,7};
Heapsort hs = heapsort baru ();
hs.sort (heap);
untuk (int i = 0; i <heap.length; i ++) {
System.out.println (heap [i]);
}
}
}