堆排序 java實現

2021-07-24 20:44:39 字數 1611 閱讀 1078

/**

* 堆排序:大堆排序 1:建立大堆排序->根據公式 父節點為 i 左節點為2*i+1;右節點為:2*i+2;

* 我們要進行大堆排序需要根據陣列元素個數找到最後節點的父節點,從這個父節點往上進行大堆排序,要求父節點的資料比左右子節點都要大

* 2.獲取到第0個元素(最大的資料),拿著這個最大的元素和陣列最後的元素進行交換,然後又進行大堆排序

*

*/

public

class

heapsort

;

buildmaxheap

(array

);

heapsort

(array

);

printutil

.printarray

(array

,printutil

.horizontal

);

}

// 建立大堆

private

static

void

buildmaxheap

(int

array

)

}

private

static

void

maxheap

(int

array

,int

length

,int

parent

)

//用父節點和左子結點中的最大值和右子節點進行比較

if(

right

<

length

&&array

[right

]>

array

[largest

])

//如果父節點不是最大值,進行交換,並對交換的子節點從新對排序

if(

largest

!=parent

)

}

//取第乙個元素(最大值)和最後乙個元素交換,交換後重新進行大堆排序

private

static

void

heapsort

(int

array

)

}

}



java實現堆排序

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

堆排序java實現

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

Java 實現堆排序

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