堆排序 大根堆

2021-10-25 14:41:17 字數 993 閱讀 8583

#include

#include

using

namespace std;

#define max 100010

int heap[max]

;//heap[i]的孩子是 2*i+1 2*i+2 父親是(i-1)/2

int heapsize =0;

//初始化堆的大小

void

heapinsert

(int index)

;//對index位置上的數進行插入

void

heapify

(int index)

;int

main

(int argc,

char

** ar**)

//對0 - n-1的數 進行堆插入操作

for(

int i =

0; i < n; i++

)for

(int i =

0; i < n; i++

)return0;

}void

heapinsert

(int index)

}void

heapify

(int index)

//選出左右孩子的最大位置 注意 左右孩子沒有的情況

int maxpos =

(right <= heapsize)

&&(heap[right]

>heap[left]

)? right : left;

maxpos = heap[index]

> heap[maxpos]

? index : maxpos;

if(maxpos == index)

swap

(heap[index]

,heap[maxpos]);

index = maxpos;

}}

堆排序(大根堆)

堆排序是利用堆的性質進行的一種選擇排序。下面先討論一下堆。1.堆堆實際上是一棵完全二叉樹,其任何一非葉節點滿足性質 key i key 2i 1 key i key 2i 2 或者key i key 2i 1 key key 2i 2 即任何一非葉節點的關鍵字不大於或者不小於其左右孩子節點的關鍵字。...

堆排序(大根堆 小根堆)

堆 堆實際上是一棵完全二叉樹,其任何一非葉節點滿足性質 key i key 2i 1 key i key 2i 2 或者key i key 2i 1 key key 2i 2 即任何一非葉節點的關鍵字不大於或者不小於其左右孩子節點的關鍵字。堆分為大頂堆和小頂堆,滿足key i key 2i 1 ke...

排序 堆排序 大根堆 大頂堆

1.小根堆 若根節點存在左子女則根節點的值小於左子女的值 若根節點存在右子女則根節點的值小於右子女的值。2.大根堆 若根節點存在左子女則根節點的值大於左子女的值 若根節點存在右子女則根節點的值大於右子女的值。3.結論 1 堆是一棵完全二叉樹 如果公有h層,那麼1 h 1層均滿,在h層連續缺失若干個右...