• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
乐碎碎
程序媛想的事儿
博客园    首页    新随笔    联系   管理    订阅  订阅
堆排序
 1 // 堆排序.cpp : 定义控制台应用程序的入口点。
 2 
 3 #include "stdafx.h"
 4 #include <string.h>
 5 #define MAX 100
 6 
 7 void swap(int &a,int &b)
 8 {
 9     int c;
10     c=a;
11     a=b;
12     b=c;
13 }
14 
15 void max_heapity(int heap[],int i,int len)//保持最大堆性质
16 {
17     int left=2*i, right=2*i+1,largest=-1;
18     if((left<=len)&&(heap[left]>heap[i]))
19         largest=left;
20     else 
21         largest=i;
22     if((right<=len)&&(heap[right]>heap[largest]))
23         largest=right;
24     if(largest!=i)
25         {
26             swap(heap[largest],heap[i]);
27             max_heapity(heap,largest,len);
28         }
29 }
30 
31 void build_maxheap(int heap[],int len) //建立最大堆
32 {
33     int index=len/2;
34     for(int i=index;i>=1;i--)
35          max_heapity(heap,i,len);
36 }
37 
38 void heap_sort(int heap[],int len)//堆排序
39 {
40     build_maxheap(heap,len);
41     for(int i=len;i>=2;i--)
42     {
43         swap(heap[1],heap[i]);//每次将最大值放在最后一个结点中
44         len-=1;
45         max_heapity(heap,1,len);
46     }
47 }
48 
49 void main()
50 {
51     int a[MAX],lengh;
52     printf("input a number:\n");
53     scanf("%d",&lengh);
54     printf("input %d number:\n",lengh);
55     for(int j=1;j<=lengh;j++) //注意i值要从1开始
56     {
57         scanf("%d",&a[j]);
58     }
59     heap_sort(a,lengh);
60     for(int i=1;i<=lengh;i++) //最终结果按从小到大排序输出
61         printf("%4d",a[i]);
62     printf("\n");
63 }

 

 

 

posted on 2012-10-10 18:16  xingle0917  阅读(243)  评论(2)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3