選擇排序 堆排序 java實現

2021-07-14 18:21:27 字數 1046 閱讀 4519

(1)小頂堆

假設有n

個元素的序列,

k0-kn,

如果將這組資料排成一棵完全二叉樹,則此樹的特點是:樹中所有節點的值都小於其左右節點的值,此樹的根必然是最小的;

(2)大頂堆

假設有n

個元素的序列,

k0-kn,

如果將這組資料排成一棵完全二叉樹,則此樹的特點是:樹中所有節點的值都大於其左右節點的值,此樹的根必然是最大的;

堆排序演算法思想:

大頂堆的根節點一定是這組資料中最大的數,如果需要對一組數進行排序,則需要先將這組資料建成大(小)頂堆,然後接可以選擇出這組資料中最大(小)的數。

第一趟先將0

—n-1

處的所有資料建成大頂堆,就可以選擇出這組資料中最大的數;

第二趟將0-n-2

處的所有資料建成大頂堆,就可以選擇出這組資料中最大的數;

第k趟將

0-n-k

處的所有資料建成大頂堆,就可以選擇出這組資料中最大的數;

堆排序的步驟分為兩步:

(1)建堆;

從最後乙個非葉子節點開始,比較該節點和其孩子節點中加大的那個節點的值,

如果較大的那個子節點的值大於父節點,則交換父節點和該子節點的值;

向前逐步調整直到根節點,保證每個節點的值都大於等於其左右子節點的值,一次建      堆完成

(2)把堆的根節點和當前陣列的最後乙個節點交換;

對於包含n

個元素的陣列而言,需要

n-1次建堆,每次建堆的作用就是選出該堆的最大(小)值;

public class heapsort

}private void bulidmaxheap(intarray,int lastindex)

}if(array[current] < array[biggerindex])//如果當前節點小於它的子節點中較大的那個元素,將當前節點和簡答的子節點交換

else}}

}private void swap(intarray,int i,int j)

java實現堆排序

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

堆排序java實現

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

Java 實現堆排序

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