java實現堆排序

2021-07-02 22:03:06 字數 1289 閱讀 7799

許多應用要用堆,比如,優先佇列,即佇列的擴充,佇列的每個元素增加乙個稱為優先順序的字段,優先佇列可以是線性結構的,但要有較高的效率,應把它組織成堆結構。元素入隊是,相當於執行堆的插入演算法;但在隊頭每次刪除的總是隊頂具有最大優先順序的元素,因此可以把它稱為最大優先順序佇列。再比如,堆排序是選擇排序中的一種典型排序,它也是利用堆來實現的,按非遞增的次序排序要使用最小堆,而按非遞減的次序排序要使用最大堆。

下面是實現堆排序的**:

lists類:線性表資料結構

heapsort類:堆排序類

public class lists

public int getvalue(int i)

public void setvalue(int i,int v)

public void insert(int i,int x)

if(i>maxsize)

for(int j=count-1;j>=i;j++)

heap[i]=x;

count++; }

public void delete(int i)

for(int j=i;j

public class heapsort }

public void filterdown(lists list,int start,int end)else

} list.setvalue(i, temp); }

//***************增加節點********************

public void addnode(lists list, int node)

public void filterup(lists list,int m)

}list.setvalue(j, temp); }

//**********====刪除乙個節點,從根節點***************

public void deletenode(lists list)

//***************進行堆排序********************==

public void sortheap(lists list)

} public static void main(string args) ;

//初始化

for(int i=0;i<10;i++)

//建立小堆

sort.minheap(list);

//增加乙個節點

/*sort.addnode(list, 15);

system.out.println("小堆:");

for(int i=0;i

堆排序java實現

公升序用大根堆,降序用小根堆 調整堆 從根節點開始向下調整堆 先建立初始堆,從n 2 1 第乙個非葉子節點 節點開始,將之看做根節點,向下調整堆,到根節點結束 迴圈i from n 1 to 0,每次取出堆的最頂層根節點,即陣列下標為0,然後與節點i交換,這樣對於大根堆而言,最大值總是在後面,再從根...

Java 實現堆排序

堆排序主要是利用堆在根節點上的特性,既在大頂堆的情況下,堆的第乙個元素是堆當中最大的元素,而在小頂堆的情況下,堆的第乙個元素是最小的節點。所以在堆排序的過程,主要的操作就是對每次取出堆頂的元素之後 在這裡使用大頂堆 我們就選出了堆中的最大元素,然後對堆剩下的元素進行再次進行大頂堆的調正,得到乙個新的...

java實現堆排序

一 堆排序原理 堆可以看做是乙個近似的完全二叉樹,樹上的每乙個節點對應陣列中的乙個元素。除了最底層外,該樹是完全充滿的。而且是從左到右填充。二叉堆可以分為兩種形式 最大堆和最小堆。堆排序的演算法 利用最大堆建立函式將輸入陣列建成最大堆,因為陣列的最大元素總在根節點a 0 中,通過把它與a n 進行互...