[JAVA]堆排序
package sort_book_datastruction;
import java.util.Arrays;
/**
* 這是一個建立最大頂堆的過程,根節點值最大, 與最後一個元素進行交換之後,
* 然後對剩下的元素進行篩選,即調整堆。
* 兩步:1.建堆;2。帥選
* @author Administrator
*
*/
public class HeapSort {
/**
* 自堆頂至葉子的調整過程,即帥選;
* @param array
* @param s 待調整根節點的位置。
* @param length
*/
public void heapAdjust(int[] array,int s, int length){
int temp = array[s];
int child = 2*s+1;//左孩子節點位置;//左孩子結點的位置。(i+1 為當前調整結點的右孩子結點的位置)
while(child<length){
// 如果右孩子大於左孩子(找到比當前待調整結點大的孩子結點)
if(child+1<length&&array[child]<array[child+1])
child++;//找到孩子節點比待調整節點大的位置上
if(array[s]<array[child]){ // 如果較大的子結點大於父結點
array[s] = array[child];// 那麼把較大的子結點往上移動,替換它的父結點
s=child; // 重新設定s ,即待調整的下一個結點的位置
child = 2*s+1;
}else{// 如果當前待調整結點大於它的左右孩子,則不需要調整,直接退出
break;
}
array[s] =temp;//把待調整的節點放到比其大的孩子節點上
}
}
/**
* 初始化建堆
* 將array[a...length-1]建成堆
* 這是一個反覆帥選的過程。
* @param array
* @param length
*/
public void buildingHeap(int[] array,int length){
//最後一個有孩子的節點的位置 i= (length -1) / 2
for(int i =(length-1)/2;i>=0;i--){
heapAdjust(array,i,length);
}
}
public void heapSort(int[] array,int length){
//初始堆
buildingHeap(array,length);
//從最後一個元素開始對序列進行調整
for(int i = length -1;i>0;--i){
//交換堆頂元素H[0]和堆中最後一個元素
int temp = array[i];
array[i] = array[0];
array[0] =temp;
//每次交換堆頂元素和堆中最後一個元素之後,都要對堆進行調整
heapAdjust(array,0,i);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
HeapSort hs =new HeapSort();
int[] array = {49,38,65,97,76,13,27,49};
hs.heapSort(array, array.length);
System.out.println(" "+Arrays.toString(array));
}
}
相關文章
- 【轉】堆排序Heap Sort——Java實現排序Java
- 看懂堆排序——堆與堆排序(三)排序
- 堆排序排序
- python 堆排序Python排序
- js堆排序JS排序
- 堆排序 Heap Sort排序
- 堆排序詳解排序
- 堆排序(C++)排序C++
- js 實現堆排序JS排序
- 堆與堆排序(一)排序
- 利用java實現插入排序、歸併排序、快排和堆排序Java排序
- 排序演算法__堆排序排序演算法
- 排序演算法 - 堆排序排序演算法
- 堆排序(實現c++)排序C++
- 堆排序c++實現排序C++
- 排序演算法-堆排序排序演算法
- 使用 Swift 實現堆排序Swift排序
- 順序表的堆排序排序
- 堆排序就這麼簡單排序
- 二叉堆及堆排序排序
- HDU 1040 As Easy As A+B(堆排序)排序
- C#堆排序演算法C#排序演算法
- 優先佇列和堆排序佇列排序
- 堆的基本操作及堆排序排序
- rust-algorithms:8-堆排序RustGo排序
- 圖解堆排序演算法圖解排序演算法
- 堆排序和快速排序效能比較排序
- 從零開始認識堆排序排序
- 堆排序原理及其應用場景排序
- 堆排序你真的學會了嗎?排序
- 線性建堆法與堆排序排序
- PHP 實現堆, 堆排序以及索引堆PHP排序索引
- 【譯】Swift演算法俱樂部-堆排序Swift演算法排序
- 常見演算法 PHP 實現 -- 堆排序演算法PHP排序
- 資料結構與演算法:堆排序資料結構演算法排序
- 資料結構學習筆記-堆排序資料結構筆記排序
- 【資料結構與演算法】堆排序資料結構演算法排序
- 資料結構與演算法——堆排序資料結構演算法排序
- 與堆和堆排序相關的問題排序