堆排序算法实现

来源:互联网 发布:刺客信条4低配优化 编辑:程序博客网 时间:2024/05/17 04:46
#include <stdio.h>int h[101];//用来存放堆的数组int n;//用来存储堆中元素的个数,也就是堆的大小//交换函数,用来交换堆中两个元素的数值void swap(int x, int y){int t;t = h[x];h[x] = h[y];h[y] = t;}//向下调整函数void siftdown(int i){int t, flag = 0;while (i*2 <= n && flag == 0){if(h[i] < h[i * 2])t = i * 2;elset = i;if (i * 2 + 1 <= n){if (h[t] < h[i*2+1])t = 2*i + 1;}if (t != i){swap(t, i);i = t;}elseflag = 1;}}//建立堆函数void creat(){int i;for (i = n/2; i >= 1; i--)siftdown(i);}//堆排序void heapsort(){while(n>1){swap(1, n);n--;siftdown(1);}}int main(){int i, num;printf("输入数据的个数:");scanf("%d", &num);printf("输入数据:\n");for (i = 1; i <= num; i++)scanf("%d", &h[i]);n = num;creat();//建堆heapsort();//堆排序//输出printf("从小到大排序之后的输出为:\n");for(i = 1; i <= num; i++)printf("%d ", h[i]);getchar();getchar();return 0;}



0 0
原创粉丝点击