public class heapsort
//此時已經完成了最大堆的構建,下面進行排序。
for(int i=len-1; i>0; i--)
} //維護最大堆,保證父節點大於等於子節點
public static void maxheapify(int a, int index, int len)
if(rightchildindexa[maxindex])
if(maxindex != index)
}//獲取當前節點的父節點下標
public static int getparentindex(int index)
//獲取當前節點的左兒子下標
public static int getleftchildindex(int index)
//獲取當前節點的右兒子下標
public static int getrightchildindex(int index)
}
排序詳解 堆排序
堆排序 heapsort 是指利用堆積樹 堆 這種資料結構所設計的一種排序演算法,它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。大根堆的要求是每個節點的值都不大於其父節點的值,即a parent i a i 在陣列的非降序排序中,需要使用的就是大根...
堆排序詳解
一 堆的定義 堆的定義如下 n個關鍵字序列l n 成為堆,當且僅當該序列滿足 l i l 2i 且l i l 2i 1 或者 l i l 2i 且l i l 2i 1 其中i屬於 1,n 2 滿足第 種情況的堆稱為小根堆 小頂堆 滿足第 種情況的堆稱為大根堆 大頂堆 在大根堆中,最大元素存放在根結點...
堆排序詳解
基本概念 要了解堆排序,首先要了解什麼是堆,要了解堆,還要先了解什麼是完全二叉樹。一 什麼是完全二叉樹?完全二叉樹 complete binary tree 有嚴格的形狀要求 從根節點起每一層從左到右填充。一棵高度為d的完全二叉樹除了d 1層以外,每一層都是滿的。底層葉節點集中在左邊的若干位置上。完...