一步一步复习数据结构和算法基础-堆排序
2012-07-24 20:58
260 查看
//任何一个非终端结点的值都大于等于(或小于等于)它左右孩子的值 //输出堆顶的最小值之后,使得剩余n-1个元素的序列重又建成一个堆,则得到n个元素中的次小值。 //如此反复执行,便能得到一个有序序列. #include<stdio.h> void shift(int a[],int i,int m) { int k,t; t=a[i];k=2*i+1; while(k<m) { if((k<m-1)&&(a[k]<a[k+1])) k++; if(t< a[k]) {a[i]=a[k];i=k;k=2*i+1;} else break; } a[i]=t; } void heap(int a[],int n) //a 为排序数组,n为数组大小(编号0-n-1) { int i,k; for(i=n/2-1;i>=0;i--) shift(a,i,n); for(i=n-1;i>=1;i--) { k=a[0];a[0]=a[i];a[i]=k; shift(a,0,i); } } void main() { int a[10],i; for(i=0;i<10;i++) scanf("%d",&a[i]); heap(a,10); for(i=0;i<10;i++) printf("%-2d",a[i]); }
相关文章推荐
- 一步一步复习数据结构和算法基础-单链表冒泡排序
- 一步一步复习数据结构和算法基础-堆分配存储表示串
- 一步一步复习数据结构和算法基础-顺序查找+二分查找
- 一步一步复习数据结构和算法基础-斐波那契查找法
- 一步一步复习数据结构和算法基础-快速排序
- 一步一步复习数据结构和算法基础-中序线索二叉树
- 一步一步复习数据结构和算法基础-后序线索二叉树
- 一步一步复习数据结构和算法基础-KMP算法
- 一步一步复习数据结构和算法基础-二叉排序树
- 一步一步复习数据结构和算法基础-稀疏矩阵基本操作
- 一步一步复习数据结构和算法基础-图的创建和基本操作(邻接矩阵)
- 一步一步复习数据结构和算法基础-prim算法(最小生成树)
- 一步一步复习数据结构和算法基础-dijkstra算法
- 一步一步复习数据结构和算法基础-链表(3)
- 一步一步复习数据结构和算法基础-栈和队列(2)
- 一步一步复习数据结构和算法基础-层次建立层次遍历二叉树
- 一步一步复习数据结构和算法基础-双链表
- 一步一步复习数据结构和算法基础-栈的简单应用(1)
- 一步一步复习数据结构和算法基础-哈希表的链地址表示
- 一步一步复习数据结构和算法基础-链表(2)