(2)從大到小排
只規定父和子節點資料間須滿足條件
堆排序兩階段
(1)將無序資料構成堆(用無序數生成滿足堆定義的完全二又樹)
(2)用堆排序(即將上一步生成的堆輸出,得到排序後的有序資料)
步驟(1)將無序資料放入完全二叉樹各節點
(2)由二叉樹的下層向上層逐層進行父子節點的資料比較
過程:(1)確定a
ia_i
ai的兩個子樹最大值,放在a
ja_j
aj(2)將a
ia_i
ai的資料與a
ja_j
aj資料比較,
(3)若否,
這樣,以a
ia_i
ai為根的子樹就被調整為乙個堆
max-
heapify
(a,i)
l=left
(i) r=
right
(i)if l<=a.heap-size and a[l]
>a[i]
largest=l
else largest=i
if r<=a.heap-size and a[r]
>a[largest]
largest=r
if largest!=i
exchange a[i] with a[largest]
max-
heapify
(a,largest)
較小的資料就像被篩子篩下去
較大數保留在篩子上面
所以把成堆的過程稱篩運算
四種常用的排序演算法
氣泡排序 法 從大到小排序 依次比較相鄰的兩個元素,通過一次比較把未排序序列中最大 或最小 的元素放置在未排序序列的末尾。public classmaopao for intm a system.out print m intt 0 for inti 0 i a.length 1 i for int...
常用演算法總結之排序(四) 快速排序
快速排序是對氣泡排序的一種改進。使用分治的策略進行排序。基本思想 通過一遍排序將待排序資料劃分為兩部分,使其中一部分比另一部分小,然後分別對兩部分資料繼續進行快速排序,直至每部分為空或只包含乙個資料。通過快速排序思想的描述可以很明顯的看出快速排序是一種採用遞迴排序的方法。具體排序過程 通過分治策略將...
資料結構與演算法 四 常用排序演算法
最近想總結一下常用的幾種排序演算法,恰好看到一系列總結的很好的部落格,感覺博主做的很用心,分享一下。排序演算法 一 之3種簡單排序 選擇,冒泡,直接插入 排序演算法 二 之希爾排序 排序演算法 三 之堆排序 排序演算法 四 之歸併排序 排序演算法 五 之快速排序 附上我自己的 實現 c 選擇排序 氣...