堆排序(heapsort)是指利用堆這種資料結構所設計的一種排序演算法。
二叉堆本質上是一種完全二叉樹,它分為兩個型別:最大堆和最小堆。最大堆任何乙個父節點的值,都大於等於它左右孩子節點的值。最小堆任何乙個父節點的值,都小於等於它左右孩子節點的值。二叉堆的根節點叫做堆頂。最大堆和最小堆的特點,決定了在最大堆的堆頂是整個堆中的最大元素;最小堆的堆頂是整個堆中的最小元素。
演算法描述
**演示
**實現
class
solution
:def
sortarray
(self, nums: list[
int])-
> list[
int]
: n =
len(nums)
ifnot nums or n==0:
return
# 初始化建立大頂堆
for i in
range
(n//2-
1,-1
,-1)
: self.maxheapify(nums, n, i)
# 取出堆頂元素
for i in
range
(n-1,-
1,-1
):temp = nums[0]
nums[0]
= nums[i]
nums[i]
= temp
self.maxheapify(nums, i,0)
return nums
defmaxheapify
(self, nums, length, i)
: left, right =
2*i+1,
2*i+
2 largest = i
if left < length and nums[left]
> nums[largest]
: largest = left
if right < length and nums[right]
> nums[largest]
: largest = right
if largest != i:
temp = nums[i]
nums[i]
= nums[largest]
nums[largest]
= temp
self.maxheapify(nums, length, largest)
使用python內建的堆資料結構來排序:
import heapq
class
solution
:def
sortarray
(self, nums: list[
int])-
> list[
int]
: heap, res =
,for i in nums:
while heap:
)return res
演算法特性十大經典排序演算法(**演示) 排序 堆排序(heapSort)
時間複雜度 o nlog n 空間複雜度 o 1 不穩定 把此序列對應的二維陣列看成乙個完全二叉樹。那麼堆的含義就是 完全二叉樹中任何乙個非葉子節點的值均不大於 或不小於 其左,右孩子節點的值。由上述性質可知大頂堆的堆頂的關鍵字肯定是所有關鍵字中最大的,小頂堆的堆頂的關鍵字是所有關鍵字中最小的。因此...
選擇排序 堆排序(Heap Sort)
演算法分析 堆排序是一種樹形選擇排序,是對直接選擇排序的有效改進。堆的定義如下 具有n個元素的序列 k1,k2,kn 當且僅當滿足 elif defined invert int arr n else int arr n endif int step 0 列印陣列 void print int ar...
堆排序練習(Heap Sort
一.目的以及背景知識 進行堆排序練習,掌握堆的構建與輸出。堆定義 對於序列a 1,n 對於任意i都有a i a 2i a i a 2 i 1 則該序列稱為大頂堆或者最大堆。反之則成為最小堆。堆篩選或堆調整 從最後乙個葉子結點開始篩選出該節點的兄弟結點與父節點中最大或最小的元素與父節點交換。建堆演算法...