C 堆排序演算法例項詳解

2022-10-04 00:42:13 字數 652 閱讀 6580

堆中元素的排列方式分為兩種:max-heap或min-heap,前者每個節點的key都大於等於孩子節點的key,後者每個節點的key都小於等於孩子節點的key。

由於堆可以看成乙個完全二叉樹,可以使用連續空間的a來模擬完全二叉樹,簡單原始的實現如下:

#include

int heapsize=0;//全域性變數記錄堆的大小

void heapsort(int array,int n)

}//構建堆

void buildheap(int array,int n)

}//堆化

void heapify(int array,int n)

else

if(right_childarray[largest])

if(largest!=n)

}void e array,int i,int j)

int main();

heapsort(arr,9);

for(int i=0;i<9;++i);

std::vector vec(arr,arr+9);

//0 1 2 3 4 8 9 3 5

for(auto c:vec){

std::cout<

本文標題: c++堆排序演算法例項詳解

本文位址:

排序演算法 詳解堆排序演算法

1 原理 堆排序是一種選擇排序,通過實現大小堆,來取出堆頂的資料,然後和最後乙個交換,然後將堆的大小減一,迴圈這個過程直到,只有乙個資料時停止。公升序建大堆,降序建小堆。2 問題 很多人會疑惑為什麼要交換之後再減小堆的大小呢?難道不交換就不能篩選出我們要的極值嗎?首先向下調整演算法的時間複雜度為o ...

堆排序演算法詳解

最大堆 每乙個結點都比其子結點大的二叉樹。堆排序思想 把所有資料建成乙個最大堆,不停的把堆頂的元素取出來依次排列,取乙個數之後,剩下的數要維持最大堆結構 那麼堆排序主要分為 建成最大堆 維持堆結構 建最大堆 時間複雜度為o n 注意 在使用陣列表示的堆結構中,結點arr index 的父結點為arr...

C 選擇排序演算法例項詳解

基本思想 每一趟從無序區中選出最小的元素,順序放在有序區的最後,直到全部元素排序完畢。由於選擇排序每一趟總是從無序區中選出全域性最小 或最大 的元素,所以適用於從大量元速度中選擇一部分排序元素。例如,從10000個元素中選出最小的前10位元素。直接選擇排序 1.排序思路 從第i趟開始,從當前無序區a...