| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 678 人关注过本帖
标题:堆排序那里错了?
只看楼主 加入收藏
Ms_
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-11-9
收藏
 问题点数:0 回复次数:3 
堆排序那里错了?
程序编译没错误,运行有错~
我猜可能是内存分配的问题吧

#define N 10
#define EXC(x,t,y) (t=x,x=y,y=t)
#include<stdio.h>
max_heap(int,int[],int);


main()
{int a[N+1],t,h_size=N,i;
 a[0]=0;
 for(i=1;i<=N;i++)
  scanf("%d",a[i]);
 for(i=N/2;i>0;i--)
  max_heap(i,a,N);

 for(i=N;i>1;i--)
 {
  {EXC(a[i],t,a[1]);
   h_size-=1;
   max_heap(1,a,h_size);
  }
 }
  for(i=N;i>=1;i--)
   printf("%d",a[i]);
}
max_heap(int i,int a[],int h_size)
{int L=2*i,R=2*i+1,t;
 int largest;
 if(L<h_size&&a[L]>a[i])
  largest=L;
 if(R<h_size&&a[R]>a[largest])
  largest=R;
 if(i!=largest)
  {EXC(a[i],t,a[largest]);
   max_heap(largest,a,h_size);
  }
}
搜索更多相关主题的帖子: 问题 
2008-11-09 19:00
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
if(R<h_size&&a[R]>a[largest])
        largest=R;

largest如果没有赋值的话,将一个负数,a[largest]不就出错了。
递归函数里的逻辑重新考虑一下。
2008-11-09 22:32
Ms_
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-11-9
收藏
得分:0 
该怎么赋值啊
该怎么赋值啊~是用malloc动态的分配地址还是怎么的?
也可以不用函数来实现堆排序----迭代的方法~
自己就是想用递归的方法看看
2008-11-10 00:50
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
#define N 10
#define EXC(x,t,y) (t=x,x=y,y=t)
#include<stdio.h>
max_heap(int,int[],int);


main()
{int a[N+1],t,h_size=N,i;
a[0]=0;
for(i=1;i<=N;i++)
  scanf("%d",&a[i]);////////////////////////////1
for(i=N/2;i>0;i--)
  max_heap(i,a,N);

for(i=N;i>=1;i--)///////////////////////////////2
{
    printf("%d\n",a[1]);////////////////////////3
  {EXC(a[i],t,a[1]);
   h_size-=1;
   max_heap(1,a,h_size);
  }
}
}
max_heap(int i,int a[],int h_size)
{int L=2*i,R=2*i+1,t;
int largest;
if(L<h_size&&a[L]>a[i])
  largest=L;
else
  largest=i;/////////////////////////////////////////4

if(R<h_size&&a[R]>a[largest])
  largest=R;
if(i!=largest)
  {EXC(a[i],t,a[largest]);
   max_heap(largest,a,h_size);
  }
}
2008-11-10 10:06
快速回复:堆排序那里错了?
数据加载中...
 
   



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

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