java實現堆排序

2021-07-31 20:46:11 字數 805 閱讀 9065

package com.base.junit;

/*** 堆排序,演算法:先將乙個無序的陣列構造成乙個大頂堆,然後將堆頂的數與陣列中的最後乙個換位置,此時

* 陣列最後乙個元素就是最大值,然後將其他的n-1個資料做遞迴

*  堆:一棵完全二叉樹,某非葉子節點 k 對應的節點為2k+1 與2k+2(小於陣列length),某節點n對應的父節點 int ((n-1)/2)**

* @author baimiao

* */

public class heapsort ;

int length = arr.length;

//遍歷所有元素,每次迴圈都可以找出最大的乙個放到陣列末尾

//第一次迴圈找到所有元素最大的

//第二次迴圈找到所有元素第二大的,放到陣列倒數第二位置...依次類推

for (int i = length - 1; i >= 0; i--)

for (int t : arr)

}//構建大頂堆,方法返回的是原陣列的資料經過推排序把最大的元素的位置放到了最後面

private static void buildheap(int array, int length)

if (right <= length)

node--;

}//此時堆頂元素(陣列第乙個)是最大值,放到最後面

compareandswap(array, 0, length);

}private static void compareandswap(int array, int leaf, int node)

}}

java實現堆排序

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

堆排序java實現

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

Java 實現堆排序

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