堆排序算法的实现
2012-06-29 15:59
127 查看
最小堆:
最大堆:
插入:
#include <string.h> #include <stdio.h> void minheap(int a[],int i,int len) { int l,r,small,t; l=2*i; r=2*i+1; if(l<=len&&a[i-1]>a[l-1]) { small=l; } else { small=i; } if(r<=len&&a[small-1]>a[r-1]) { small=r; } if(small!=i) { t=a[i-1]; a[i-1]=a[small-1]; a[small-1]=t; minheap(a,small,len); } } void buildminheap(int a[],int len) { int i; for(i=len/2;i>0;i--) { minheap(a,i,len); } } void main() { int len,i; int heap[]={1,2,3,4,5,6,7,8,9,0}; len=sizeof(heap)/sizeof(int); printf("original:"); for(i=0;i<len;i++) { printf("%d",heap[i]); } printf("\n"); buildminheap(heap,len); printf("minheap :"); for(i=0;i<len;i++) { printf("%d",heap[i]); } printf("\n"); system("pause"); return 0; }
最大堆:
#include <string.h> #include <stdio.h> void maxheap(int a[],int i,int len) { int l,r,large,t; l=2*i; r=2*i+1; if(l<=len&&a[i-1]<a[l-1]) { large=l; } else { large=i; } if(r<=len&&a[large-1]<a[r-1]) { large=r; } if(large!=i) { t=a[i-1]; a[i-1]=a[large-1]; a[large-1]=t; maxheap(a,large,len); } } void buildmaxheap(int a[],int len) { int i; for(i=len/2;i>0;i--) { maxheap(a,i,len); } } void main() { int len,i; int heap[]={1,2,3,4,5,6,7,8,9,0}; len=sizeof(heap)/sizeof(int); printf("original:"); for(i=0;i<len;i++) { printf("%d",heap[i]); } printf("\n"); buildmaxheap(heap,len); printf("maxheap :"); for(i=0;i<len;i++) { printf("%d",heap[i]); } printf("\n"); system("pause"); return 0; }
插入:
void oneinsertheap(int b[],int in,int len) { int i; if(in<b[0]) { b[0]=in; printf("b:"); for(i=0;i<len;i++) { printf("%d ",b[i]); } printf("\n"); maxheap(b,1,len); } else { printf("insert value isn't in the top min 10"); } }
相关文章推荐