十大經典排序演算法 7 堆排序

2021-10-03 15:07:28 字數 1684 閱讀 5807

堆排序

堆排序(heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法:

演算法步驟

**演示

**實現

var len;

// 因為宣告的多個函式都需要資料長度,所以把len設定成為全域性變數

function

buildmaxheap

(arr)

}function

heapify

(arr, i)

if(right < len && arr[right]

> arr[largest])if

(largest != i)

}function

swap

(arr, i, j)

function

heapsort

(arr)

return arr;

}

def

buildmaxheap

(arr)

:import math

for i in

range

(math.floor(

len(arr)/2

),-1

,-1)

: heapify(arr,i)

defheapify

(arr, i)

: left =

2*i+

1 right =

2*i+

2 largest = i

if left < arrlen and arr[left]

> arr[largest]

: largest = left

if right < arrlen and arr[right]

> arr[largest]

: largest = right

if largest != i:

swap(arr, i, largest)

heapify(arr, largest)

defswap

(arr, i, j)

: arr[i]

, arr[j]

= arr[j]

, arr[i]

defheapsort

(arr)

:global arrlen

arrlen =

len(arr)

buildmaxheap(arr)

for i in

range

(len

(arr)-1

,0,-

1): swap(arr,

0,i)

arrlen -=

1 heapify(arr,0)

return arr

十大經典排序演算法

載自 排序演算法是 資料結構與演算法 中最基本的演算法之一。排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有 插入排序 希爾排序 選擇排序 氣泡排序 歸併排序 快速排...

十大經典排序演算法

不穩定排序種類為4種 快速排序 核心思想是partition操作 二分法分而治之 平均時間複雜度nlogn 希爾排序 高階版的插入排序,先把間隔較遠的子串行排序,最後間隔為1時,等同於插入排序 插入排序在序列有序時,時間複雜度常數級,所以先讓子串行總體有序,能有效降低時間複雜度 平均時間複雜度n 1...

十大經典排序演算法

常見經典排序 非線性時間比較類排序 通過比較來決定元素間的相對次序,由於其時間複雜度不能突破o nlogn 因此稱為非線性時間比較類排序。線性時間非比較類排序 不通過比較來決定元素間的相對次序,它可以突破基於比較排序的時間下界,以線性時間執行,因此稱為線性時間非比較類排序。時間複雜度 空間複雜度 穩...