(利用大頂堆排序)
// 自己建立堆! (大頂堆)
#include
using
namespace std;
//交換陣列中兩個數的函式
void
swap
(int arr,
int i,
int j)
//heapify的過程
void
heapify
(int tree,
int n,
int i)
}void
build_heap
(int tree,
int n)
// 建立大頂堆
}//利用大頂堆排序
void
heap_sort
(int tree,
int n)
}//主函式測試
intmain()
// 測試
;int n =10;
build_heap
(arr,10)
;//測試 build_heap
int i;
for(i =
0; i < n;
++i)
heap_sort
(arr,10)
;// 測試 heap_sort
for(
int i =
0; i < n;
++i)
return0;
}
大頂堆排序
堆排序的思想借助了二叉排序樹,時間複雜度 o nlgn 空間複雜度o n 首先需要構建堆,堆分為大頂堆和小頂堆,如果是大頂堆,任意乙個元素,滿足arr i arr 2 i 1 arr i arr 2 i 2 小頂堆滿足arr i arr 2 i 1 arr i arr 2 i 2 堆本質上是乙個完全...
堆排序(大頂堆)
ifndef maxheap define maxheap includeusing namespace std const int capacity 100 class maxheap void push const int data void initialize int a,int thesi...
堆排序之 大頂堆
堆的定義 設有n個元素的序列 1 2 解釋 如果讓滿足以上條件的元素序列 建堆的步驟 從最後乙個非終端結點開始往前逐步調整,讓每個雙親大於 或小於 子女,直到根節點為止。注意 終端結點 即葉子 沒有任何子女,無需單獨調整。建堆的具體做法 1 將原始序列轉換成完全二叉樹。2 從序號最大的非葉子節點開始...