Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42587
  • 博文数量: 20
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-05 10:35
文章分类

全部博文(20)

文章存档

2016年(16)

2015年(4)

我的朋友

分类: C/C++

2016-04-23 17:25:25


点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #define MAX 255

  3. //堆排序学习
  4. int R[MAX];

  5. void Heapify(int s,int m)
  6. {
  7.     //调整堆
  8.     int j,temp;
  9.     temp=R[s];
  10.     j=2*s;
  11.     while(j<=m)
  12.     {
  13.         if(j<m&&R[j]>R[j+1]) j++;
  14.         if(temp<R[j]) break;
  15.         R[s]=R[j];
  16.         s=j;
  17.         j=j*2;
  18.     }
  19.     R[s]=temp;
  20.     
  21. }

  22. void BuildHeap(int n)
  23. {
  24.     //初始建堆
  25.     int i;
  26.     for(i=n/2;i>0;i--)
  27.     Heapify(i,n);
  28.     
  29. }

  30. void Heap_sort(int n)
  31. {
  32.     //堆排序
  33.     int i;
  34.     BuildHeap(n);
  35.     for(i=n;i>1;i--)
  36.     {
  37.         R[0]=R[1];R[1]=R[i];R[i]=R[0];
  38.         Heapify(1,i-1);
  39.     }

  40. }

  41. int main()
  42. {
  43.     //测试函数
  44.      printf("堆排序示例:\n");
  45.      int n,i;
  46.      printf("Please input the number under %d\n",MAX);
  47.      scanf("%d",&n);
  48.      if(n>MAX)
  49.      {
  50.          printf("The number is not right!\n");
  51.          return 0;
  52.      }
  53.      printf("Please input the array one by one:\n");
  54.      for(i=1;i<=n;i++)
  55.      {
  56.          scanf("%d",&R[i]);
  57.      }
  58.     printf("The array you input is:\n");
  59.     for(i=1;i<=n;i++)
  60.     {
  61.         printf("%d ",R[i]);
  62.     }    
  63.     printf("The array after Heap_sort is:\n");
  64.     Heap_sort(n);
  65.     for(i=1;i<=n;i++)
  66.     {
  67.         printf("%d ",R[i]);
  68.     }
  69.         
  70.      return 0;
  71. }

阅读(1162) | 评论(0) | 转发(0) |
0

上一篇:直接选择排序

下一篇:没有了

给主人留下些什么吧!~~