gpt4 book ai didi

c - 调试堆排序

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:05 25 4
gpt4 key购买 nike

这是我的程序,它使用三个函数来执行堆排序。我不知道问题出在哪里。如果有人愿意提供帮助,我们会很高兴。

这两个函数计算索引的左右

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

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

这里的max是最大数组索引。a 是数组我是索引

void maxheapify(int i,int *a,int max)
{
if(i>(max-1)/2)
return;
else
{
int big=0,temp=0;

if(a[i]<a[left(i)])
big=left(i);

if(right(i)<=max && a[i]<a[right(i)])
big=right(i);

if(big==i)
return;

else
{
temp=a[big];
a[big]=a[i];
a[i]=temp;
maxheapify(big,a,max);
}
}
}

void buildmaxheap(int *a,int max)
{
int i;

for(i=0;i<=(max-1)/2;i++)
maxheapify(i,a,max);

}

void heapsort(int *a,int max)
{
int j=0,temp=0;

for(j=max;j>0;j--)
{
buildmaxheap(a,j);
temp=a[0];
a[0]=a[j];
a[j]=temp;
}
}

最佳答案

关于您的代码,我注意到一件事。你的左右条件都可以一个接一个满足。导致右移动到父级,但不能保证right(i) >= left(i)。我觉得这可能会在堆完成后导致一些排序问题

关于c - 调试堆排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18979378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com