#include <stdio.h> #define SWAP(a,b) temp=a;a=b;b=temp int temp; void sift_up(int a[],int i) //元素上移 { while((i!=1)&&(a[i/2]<a[i])) { SWAP(a[i/2],a[i]); i=i/2; } } void sift_down(int a[],int n,int i) //元素下移 { while(2*i<=n) { i=2*i; if((i+1<=n)&&(a[i+1]>a[i])) i=i+1; if(a[i/2]<a[i]) SWAP(a[i/2],a[i]); } } void insert(int a[],int *n,int x) //元素的插入 { *n=*n+1; a[*n]=x; sift_up(a,*n); } void delete(int a[],int *n,int i) //删除元素 { int x=a[i],y=a[*n]; SWAP(a[i],a[*n]); *n=*n-1; if(y>x) sift_up(a,i); else sift_down(a,*n,i); } int delete_max(int a[],int *n) //取最大值 { int max=a[1]; delete(a,n,1); return max; } void make_heap(int a[],int b[],int n) { int i,*m=0; for(i=0;i<n;i++) insert(b,m,a[i]); } int main(int argc, const char * argv[]) { int n=11; int *p; p=&n; int a[11]={0,25,20,15,13,18,8,3,5,4,2}; int b[11]={0}; make_heap(a,b,10); for(int i=0;i<11;i++) printf("%d",b[i]); return 0; }
堆操作
猜你喜欢
转载自blog.csdn.net/qq_31631167/article/details/51178804
今日推荐
周排行