做了个建立最大堆的 代码 但通不过 请教

namewchwch 2008-11-30 09:08:58
#include <cstdlib>
#include <iostream>

using namespace std;
int parent(int i)
{return (i/2);}

int left(int i)
{return (2*i);}

int right(int i)
{return (2*i+1);}


void max_tree(int *a,int i,int n)
{
int l,r,largest ;
l= left(i),r=right(i);
if((l <=n)&& (a[l-1]>a[i-1]))
largest =l;
else
largest =i;
if(r<= n&& a[r-1]>a[largest-1])largest =r;

if(largest !=i)
{r=a[i-1];
a[i-1]=a[largest-1];
a[largest-1]=a[i-1];
}
max_tree(a, largest, n) ;
}

int build_tree(int *a,int n)
{ int i;
for(i=n/2;i>0;i--)max_tree(a,i,n);
}

int main()
{int a[10]={1,2,4,5,6,7,8,9,3,0},n=10;
int *p;
p=&a[0];
build_tree(p,n);

getchar();


}

...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
awqwqw 2008-11-30
  • 打赏
  • 举报
回复
帮顶
就呆在云上 2008-11-30
  • 打赏
  • 举报
回复

你的递归应该放在if里面
看修改的吧:

#include <cstdlib> 
#include <iostream>

using namespace std;
int parent(int i)
{return (i/2);}

int left(int i)
{return (2*i);}

int right(int i)
{return (2*i+1);}

void max_tree(int *a,int i,int n)
{
int l,r,largest ;
l= left(i),r=right(i);
if((l <=n)&& (a[l-1]>a[i-1]))
largest =l;
else
largest =i;
if(r <= n&& a[r-1]>a[largest-1])
largest =r;

if(largest !=i)
{
r=a[i-1];
a[i-1]=a[largest-1];
a[largest-1]=r;
max_tree(a, largest, n) ;
}

}

int build_tree(int *a,int n)
{
int i;
for(i=n/2;i>0;i--)
max_tree(a,i,n);
return 1;
}

int main()
{
int a[10]={1,2,4,5,6,7,8,9,3,0},n=10;
int *p;
p=&a[0];
build_tree(p,n);

getchar();


}
android2008 2008-11-30
  • 打赏
  • 举报
回复
不懂,up

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧