登 录
今天在图书馆把优先队列好好看了看,还把快排看了个头~感觉不错~~就是图书馆的椅子太硬了。。坐了快俩小时,咯得慌。。。
回来把函数写了下,虽然是参照书的 = = 下次要自己写出来!不过原理已经懂了~~~
我这个是实现优先队列插入,堆的维护,删除,这个是最大优先队列~~
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h> using namespace std; int heapsize = 0; void MaxHeapIFY(int a[],int i) { int left = i*2; int right = i*2+1; int largest; if( left <= heapsize && a[left] > a[i] ) largest = left; else largest = i; if( right <= heapsize && a[right] > a[largest] ) largest = right; if( largest != i ) { swap(a[i],a[largest]); MaxHeapIFY(a,largest); } } void HeapIncreaseKey(int a[],int i,int key) { a[i] = key; int parent = i/2; while( i>1 && a[parent] < a[i] ) { swap(a[i],a[parent]); i = parent; parent = i/2; } } void MaxHeapInsert(int a[],int key) { heapsize++; a[heapsize] = INT_MIN;// = = 这点不明白呀 晚上问问GB去。。 HeapIncreaseKey(a,heapsize,key); } int HeapExtractMax(int a[]) { int max = a[1]; a[1] = a[heapsize]; heapsize--; MaxHeapIFY(a,1); return max; } int main(void) { int a[11] = {0,0,6,7,8,3,4,2,5,9,1}; for(int i=1; i<=10; i++) { MaxHeapInsert(a,a[i]); } for(int i=1; i<=10; i++) printf("%d ",HeapExtractMax(a)); system("pause"); return 0; }
抱歉!评论已关闭.