007 排序演算法 堆排序

2022-02-12 04:34:10 字數 1207 閱讀 1028

一、概述

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

排序方法

時間複雜度(平均)

時間複雜度 (最壞)

時間複雜度(最好)

空間複雜度

穩定性堆排序

$o(nlogn)$

o(nlogn)

o(nlogn)

o(1)

不穩定在堆的資料結構中,堆中的最大值總是位於根節點(在優先佇列中使用堆的話堆中的最小值位於根節點)。堆中定義以下幾種操作:

1.1、說明

不斷將大根堆的堆頂元素與堆尾元素交換,再重建大根堆的過程。將待排序列構建成大根堆,用變數 heapsize 來控制堆的大小,然後不斷地 heapify ,直到 heapsize 等於零。在 heapify 的過程中就是先比較子節點的大小,然後比較父節點和子節點的大小,如果最後發現父節點是比子節點大的話跳出 heapify 迴圈,否則將子節點與父節點交換,並且找到子節點的左孩子,再重複上訴過程,直到左孩子的位置 left 大於 heapsize ,heapify 迴圈結束.

1.2、**實現

public

class

heapsort

for(int i = 0; i< arr.length; i++)

int heapsize =arr.length;

swap(arr, 0, --heapsize);

while(heapsize > 0)

}private

static

void heapinsert(int arr, int

index)

}private

static

void heapify(int arr, int index, int

heapsize)

swap(arr, largest, index);

index =largest;

left = index * 2 +1;}}

private

static

void swap(int arr, int i, int

j)}

傳送到

8 排序演算法 堆排序

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

JS演算法4 排序 堆排序

堆 是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序 是指利用堆這種資料結構所設計的一種排序演算法 heapinsert arr,index 增大堆結構 先建立大根堆,這是乙個往上走的過程,進來的元素與父元素比,大了就往上走,此時陣列仍為無...

18 排序 堆排序

void selection sort elementtype a,int n 中找到最小元,並將其位置賦給minposition minposition scanformin a,i,n 1 將未排序部分的最小元換到有序部分的最後位置 swap a i a minposition 時間複雜度 t ...