大頂堆排序

2021-10-01 14:54:06 字數 792 閱讀 1653

(利用大頂堆排序)

// 自己建立堆! (大頂堆)

#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 從序號最大的非葉子節點開始...