| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 557 人关注过本帖
标题:堆排序.......怎么就排不了啊????
只看楼主 加入收藏
20072815
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2007-12-1
收藏
 问题点数:0 回复次数:4 
堆排序.......怎么就排不了啊????
#include<stdio.h>

typedef struct{
   int Heap[100];
   int N;
   }Sqlist;

void HeapSort(Sqlist H) {
   int i,m;
   for(i=H.N/2;i>0;--i)
   HeapAdjust(H,i,H.N);
   for(i=H.N;i>1;--i) {
   m=H.Heap[1];
   H.Heap[1]=H.Heap[i];
   H.Heap[i]=m;
   HeapAdjust(H,1,i-1);
   }
}

HeapAdjust(Sqlist H, int s, int m) {
   int c,j;
   c=H.Heap[s];
   for(j=2*s;j<=m;j*=2) {
   if(j<m&&H.Heap[j]<H.Heap[j+1]) ++j;
   if(c>=H.Heap[j]) break;
   H.Heap[s]=H.Heap[j];
   s=j;
   }
   H.Heap[s]=c;
 }

PrintSqList(Sqlist H)
{
int i;
for(i=1;i<H.N;i++)
printf("%d ",H.Heap[i]);
printf("%d\n",H.Heap[H.N]);
}


 main()
 {
    int i;
    Sqlist H;
    scanf("%d",&H.N);
    for(i=1;i<=H.N;i++)
    scanf("%d",&H.Heap[i]);
    for(i=0;i<H.N;i++)
    HeapSort(H);
    PrintSqList(H);
}
为什么   for(i=H.N/2;i>0;--i)
   HeapAdjust(H,i,H.N);
   for(i=H.N;i>1;--i) {
   m=H.Heap[1];   走这块时候H所指的数值又回到了输入时候的数值

[[it] 本帖最后由 20072815 于 2008-10-22 21:36 编辑 [/it]]
搜索更多相关主题的帖子: include 
2008-10-22 17:32
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
又不是苍蝇拍……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-22 18:30
20072815
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2007-12-1
收藏
得分:0 
拍大脑
2008-10-22 21:37
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
全部用到SqList的地方,用指针。结构体在参数中是复制传递的。

我说你都学到了堆排了,不会连这个都不懂吧= =

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-22 22:31
20072815
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2007-12-1
收藏
得分:0 
没学到,对堆排序感兴趣,试着一排,傻了
2008-10-23 19:44
快速回复:堆排序.......怎么就排不了啊????
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024890 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved