一步一步解析java排序演算法 堆排序(最大堆)

2021-07-16 14:50:53 字數 1831 閱讀 2075

與最小堆(遞減)類似:

最大堆(遞增)的調整操作:

//從i節點開始調整, i節點的子節點為 2*i+1, 2*i+2  

public

static

void

maxheapfixdown(int a, int i, int n)

a[i] = temp; //調整結束

}

建立最大堆:

/**

* 建立最大堆

* 對陣列中的每個元素進行子節點調整,最大的向上移動

*@param a 陣列

*@param n 陣列長度

*/static

void makemaxheap(int a, int n)

堆排序:

public

static

void

maxheapsorttodescendarray(int a, int n)

} public

static

void

swap(int a,int i,int j)

此時的陣列是遞增陣列;

public

static

void

main(string args) ;

maxheapsorttodescendarray(unsort, unsort.length);

for (int i = 0; i < unsort.length; i++)

}

執行結果:

1 2 8 24 40 55 80 100 563

完整**貼出:

//從i節點開始調整, i節點的子節點為 2*i+1, 2*i+2

public

static

void

minheapfixdown(int a, int i, int n)

a[i] = temp; //調整結束

}

//從i節點開始調整, i節點的子節點為 2*i+1, 2*i+2

public

static

void

maxheapfixdown(int a, int i, int n)

a[i] = temp; //調整結束

}

/*** 建立最小堆

* 對陣列中的每個元素進行子節點調整,最小的向上移動

*@param a 陣列

*@param n 陣列長度

*/static

void makeminheap(int a, int n)

/*** 建立最大堆

* 對陣列中的每個元素進行子節點調整,最大的向上移動

*@param a 陣列

*@param n 陣列長度

*/static

void makemaxheap(int a, int n)

public

static

void

minheapsorttodescendarray(int a, int n)

} public

static

void

maxheapsorttodescendarray(int a, int n)

} public

static

void

swap(int a,int i,int j)

一步一步解析java排序演算法 堆排序(最小堆)

首先明確什麼是堆?乙個陣列 int unsort 堆的表現形式 這是乙個最小堆,根節點是最小的 用陣列來表示堆,i結點的父結點下標就為 i 1 2。它的左右子結點下標分別為2 i 1和2 i 2。這樣就是給數組建好堆了 下面進入堆排序的核心步驟 堆節點的移動 這裡需要對unsort 3 12進行調整...

一步一步寫演算法(之堆排序)

堆排序是另外一種常用的遞迴排序。因為堆排序有著優秀的排序效能,所以在軟體設計中也經常使用。堆排序有著屬於自己的特殊性質,和二叉平衡樹基本是一致的。打乙個比方說,處於大堆中的每乙個資料都必須滿足這樣乙個特性 1 每乙個array n 不小於array 2 n 2 每乙個array n 不小於array...

一步一步寫演算法(之快速排序)

快速排序是程式設計中經常使用到的一種排序方法。可是很多朋友對快速排序有畏難情緒,認為快速排序使用到了遞迴,是一種非常複雜的程式,其實未必如此。只要我們使用好了方法,就可以自己實現快速排序。首先,我們複習一下,快速排序的基本步驟是什麼 1 判斷輸入引數的合法性 2 把陣列的第乙個資料作為比較的原點,比...