堆排序(heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法:
大頂堆:每個節點的值都大於或等於其子節點的值,在堆排序演算法中用於公升序排列;
小頂堆:每個節點的值都小於或等於其子節點的值,在堆排序演算法中用於降序排列;
堆排序的平均時間複雜度為 ο(nlogn)。
建立乙個堆 h[0……n-1];
把堆首(最大值)和堆尾互換;
把堆的尺寸縮小 1,並呼叫 shift_down(0),目的是把新的陣列頂端資料調整到相應位置;
重複步驟 2,直到堆的尺寸為 1。
詳細過程
package cn.myname.sort
import scala.collection.mutable.arraybuffer
import scala.util.control.breaks._
object heap_sort
def sort(arr:arraybuffer[int]):arraybuffer[int] =
var j = arr.length - 1
//自上而下從大頂堆中將最大數放置末尾,並且餘下的結構也要滿足大頂堆的定義.
while ( j > 0)
arr} def heap(arr:arraybuffer[int],m:int,j:int):unit = }}
arr(i) = x //將父節點的值賦給子節點
}}
arraybuffer(4, 5, 6, 8, 9)
程序完成,退出碼 0
堆排序主要是要先建立堆,此時是從下到上,自左向右,每個非葉節點都要滿足堆的定義.
然後是排序的過程,將堆頂元素和末尾元素交換,交換後的堆是從上到下
一一判斷每個非葉節點是否滿足堆的定義,
此時不必考慮最後乙個元素,最後得到了乙個公升序結果.
堆排序|菜鳥教程
九大排序演算法
快速排序 基於scala實現
快速排序由於排序效率在同為o n logn 的幾種排序方法中效率較高,因此經常被採用,再加上快速排序思想 分治法也確實實用.快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 該方法的基本思想...
堆排序時間複雜度 基於PHP實現堆排序原理
每日17點準時技術乾貨分享 堆 堆 heap 是電腦科學中一類特殊的資料結構的統稱,通常是乙個可以被看做一棵樹的陣列物件。堆 ki k2i,ki k2i 1 ki k2i,ki k2i 1 i 1,2,3,4.n 2 關於堆 完全二叉樹 說到堆排序,就不能不提完全二叉樹,這些基本概念在網上到處都是,...
堆排序實現
今天抽空寫了個堆排序的演算法,廢話不多說,直接上源 include include includeusing namespace std define maxsize 6 void print int a,int size maxsize void percolate up int a,int si...