用堆实现优先队列
来源:互联网 发布:tgp腾讯游戏客户端mac 编辑:程序博客网 时间:2024/06/05 01:36
#include<iostream>using namespace std;int heap_length;int heap_size;void exchange(int &a,int &b){int temp=a;a=b;b=temp;}int left(int i){return 2*i+1;}int right(int i){return 2*i+2;}int parent(int i){return (i-1)/2;}void heapifx(int *arry,int i){int l=left(i);int r=right(i);int largest=i;if((l+1)<=heap_size&&arry[l]>arry[i])largest=l;else largest=i;if((r+1)<=heap_size&&arry[r]>arry[largest])largest=r;if(largest==i)return ;exchange(arry[i],arry[largest]);heapifx(arry,largest);}void build_heap(int *arry,int n){int i;for(i=heap_size/2;i>=0;i--){heapifx(arry,i);}}void show_heap(int *arry,int i){for(int j=0;j<i;j++)cout<<arry[j]<<" ";cout<<endl;}void heap_sort(int *arry,int n){for(int i=n;i>1;i--){exchange(arry[0],arry[heap_size-1]);heap_size--;heapifx(arry,0);}}/*****返回优先队列 最大键值的元素*****/ int maxnum(int *arry){return arry[0];}/*****去掉并返回优先队列最大键值的元素*****/ int extract_max(int *arry){if(heap_size<1){cout<<"error heap underflow";return -1;}int max=arry[0];arry[0]=arry[heap_size-1];heap_size=heap_size-1;heapifx(arry,0);return max; }/*****将优先队列元素i的关键字增加到key*****/ void increase_key(int *arry,int i,int key){if(key<arry[i]){cout<<"error new key is smaller than current key.\n";return ;}arry[i]=key;while(i>0&&arry[parent(i)]<arry[i]){exchange(arry[i],arry[parent(i)]);i=parent(i);}}/*****将元素key插入到优先队列中*****/ void heap_insert(int*arry,int key){heap_size=heap_size+1;arry[heap_size-1]=-9999;increase_key(arry,heap_size-1,key); }int main(int argc,char**argv){int arry[20]={16,14,10,8,7,9,3,2,4,1};heap_size=10;cout<<"Build heap: ";build_heap(arry,heap_size);show_heap(arry,heap_size);cout<<"maxnum:";cout<<maxnum(arry)<<endl;cout<<"Heap extract_max: ";cout<<extract_max(arry)<<endl;show_heap(arry,heap_size);cout<<"increase heap element 5 to key 13: ";increase_key(arry,5,13);show_heap(arry,heap_size);cout<<"Heap insert 40: ";heap_insert(arry,40);show_heap(arry,heap_size);return 0;}
0 0
- 用堆实现优先队列
- 用堆实现优先队列
- 用堆实现优先队列
- 用堆实现优先队列
- 用堆实现优先队列
- 优先队列实现堆
- 优先队列(堆实现)
- 用最大堆实现优先队列
- 用堆实现的优先队列
- 用二叉堆实现优先队列
- 用最小堆实现优先队列
- 用有序二叉堆实现优先队列
- 【数据结构】之用堆实现优先队列
- 最小优先队列--堆实现
- 堆排序,优先队列实现
- 优先队列--二叉堆实现
- 利用堆实现堆排序&优先队列
- 利用堆实现堆排序&优先队列
- Android:圆形头像
- HDU1162最小生成树
- 网页宽度自动调整响应式网页
- 结合属性文件的工厂模式(java反射的应用)
- mysql 数据库导入导出方法总结(是时候总结)
- 用堆实现优先队列
- nyist5 暴力;kmp
- 10月28日
- mysql常用命令
- Java GC的工作原理
- Object-C的消息传递机制和method swizzling方法混淆
- 函数返回值—返回局部变量
- apache 显示cgi源码
- 响应式布局入门