堆排序heapSort C 實現

2021-10-08 14:21:34 字數 797 閱讀 5987

#include

using

namespace std;

// 對arr[i]為根的子樹建堆;i:根節點下標 n:堆大小

void

heapify

(int arr,

int n,

int i)

}// main function to do heap sort

void

heapsort

(int arr,

int n)

}void

printarray

(int arr,

int n)

intmain()

;int n =

sizeof

(arr)

/sizeof

(arr[0]

);heapsort

(arr, n)

;

cout <<

"sorted array is \n"

;printarray

(arr, n)

;}

堆排序對相同長度的陣列比較次數是固定的,時間效能是穩定的o(nlogn)。

但缺點也同樣在此,哪怕對於乙個有序的陣列,堆排序要耗費同樣的時間排序。

《演算法導論》上講基數排序還有這麼一句話:快速排序通常比基數排序更有效地使用硬體的快取。因為快排是順著掃的,堆排序是跳著走的;快排的訪問模型的區域性性(locality)更強,,堆排序差一些。

所以大多情況下,快排要比堆排序更快。

堆排序實現

今天抽空寫了個堆排序的演算法,廢話不多說,直接上源 include include includeusing namespace std define maxsize 6 void print int a,int size maxsize void percolate up int a,int si...

堆排序實現

1 堆排序演算法描述 1 定義 n個關鍵字序列kl,k2,kn稱為 heap 當且僅當該序列滿足如下性質 簡稱為堆性質 1 ki k 2i 且ki k 2i 1 1 i n 2 當然,這是小根堆,大根堆則換成 號。k i 相當於 二叉樹的非 葉子結點,k 2i 則是左子節點,k 2i 1 是右子節點...

實現堆排序

堆排序是在程式設計中經常用到的東西,在c 的stl底層裡面有make heap,push heap,pop heap 和 sort heap四個介面函式,我們用到的最多的是stl中的priority queue,其中的底層也是利用前面幾個函式實現的。下面我們就自己實現以下堆排序,主要包括調整堆結構,...