【数据结构】堆排序
发布时间:2021-05-18 10:35 所属栏目:53 来源:网络整理
导读:参考一篇文章: http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html 另外,在下面的链接下还有动画演示: http://sjjp.tjuci.edu.cn/sjjg/DataStructure/DS/web/flashhtml/duipaixu.htm ? 下面是源代码: /*堆排序(大顶堆) 2011.9.14*/#in
参考一篇文章: http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html 另外,在下面的链接下还有动画演示: http://sjjp.tjuci.edu.cn/sjjg/DataStructure/DS/web/flashhtml/duipaixu.htm ? 下面是源代码: /*堆排序(大顶堆) 2011.9.14*/ #include<stdio.h> void swap(int *a,int *b) { int temp; temp = *a; *a = *b; *b = temp; } void HeapAdjust(int *a,int i,int size) //调整堆 { int lchild=2*i; //i的左孩子节点序号 int rchild=2*i+1; //i的右孩子节点序号 int max=i; //临时变量 if(i<=size/2) //如果i不是叶节点就不用进行调整 { if(lchild<=size&&a[lchild]>a[max]) { max=lchild; } if(rchild<=size&&a[rchild]>a[max]) { max=rchild; } if(max!=i) { swap(&a[i],&a[max]); HeapAdjust(a,max,size); //避免调整之后以max为父节点的子树不是堆 } } } void BuildHeap(int *a,int size) //建立堆 { int i; for(i=size/2;i>=1;i--) //非叶节点最大序号值为size/2 { HeapAdjust(a,i,size); } } void HeapSort(int *a,int size) //堆排序 { int i; BuildHeap(a,size); for(i=size;i>=1;i--) { //cout<<a[1]<<" "; swap(&a[1],&a[i]); //交换堆顶和最后一个元素,即每次将剩余元素中的最大者放到最后面 //BuildHeap(a,i-1); //将余下元素重新建立为大顶堆 HeapAdjust(a,1,i-1); //重新调整堆顶节点成为大顶堆 } } int main(int argc,char *argv[]) { //int a[]={0,16,20,3,11,17,8}; int a[100]; int size; int i; printf("给size赋值(1<=size<100):\n"); scanf("%d",&size); printf("输入size个值给数组:\n"); for(i=1;i<=size;i++) scanf("%d",&a[i]); HeapSort(a,size); printf("调整后的数组为:\n"); for(i=1;i<=size;i++) printf("%d ",a[i]); printf("\n"); return 0; } (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读