堆排序(heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法:
堆排序的平均時間複雜度為 ο(nlogn)。
1. 演算法步驟
建立乙個堆 h[0……n-1];
把堆首(最大值)和堆尾互換;
把堆的尺寸縮小 1,並呼叫 shift_down(0),目的是把新的陣列頂端資料調整到相應位置;
重複步驟 2,直到堆的尺寸為 1。
2.**演示
**實現
package com.data.algorithm;
/** * 堆排序演示
* 時間複雜度:nlgn
* @author dzc
*/public class heapsortdemo ;
int arr = ;
heapsort(arr);
for (int i : arr)
}/**
* 建立堆,
* @param arr 待排序列
*/private static void heapsort(int arr)
//調整堆結構+交換堆頂元素與末尾元素
for (int i = arr.length - 1; i > 0; i--)
}/**
* 調整堆
* @param arr 待排序列
* @param parent 父節點
* @param length 待排序列尾元素索引
*/private static void adjustheap(int arr, int parent, int length)
// 如果父結點的值已經大於孩子結點的值,則直接結束
if (temp >= arr[lchild])
// 把孩子結點的值賦給父結點
arr[parent] = arr[lchild];
//選取孩子結點的左孩子結點,繼續向下篩選
parent = lchild;
lchild = 2 * lchild + 1;
}arr[parent] = temp;}}
007 排序演算法 堆排序
一 概述 堆排序 英語 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。排序方法 時間複雜度 平均 時間複雜度 最壞 時間複雜度 最好 空間複雜度 穩定性堆排序 o nlogn o...
8 排序演算法
1 氣泡排序 bubble sort 演算法描述 比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數 針對所有的元素重複以上的步驟,除了最後乙個 重複步驟1 3,直到排序完成。實現 public clas...
JS演算法4 排序 堆排序
堆 是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序 是指利用堆這種資料結構所設計的一種排序演算法 heapinsert arr,index 增大堆結構 先建立大根堆,這是乙個往上走的過程,進來的元素與父元素比,大了就往上走,此時陣列仍為無...