與最小堆(遞減)類似:
最大堆(遞增)的調整操作:
//從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 把陣列的第乙個資料作為比較的原點,比...