首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个堆积算法出了什么问题?

这个堆积算法出了什么问题?
EN

Stack Overflow用户
提问于 2019-06-16 21:43:43
回答 2查看 44关注 0票数 0

我不确定我的代码有什么问题,并且它没有将数组转换为heap.please帮助!指针a是指向传递给函数的数组的指针(现在您一定已经知道了),z是数组的长度。请给我解释一下为什么我错了。我不擅长编码(你肯定也通过我的代码知道了这一点)。感谢您的宝贵时间。

代码语言:javascript
复制
int heapy(int *a,int z)
{
 for(i = 0; i<z ;i++)
 {   c[i] = a[i];
    for(j = i; j >= 0; --j)
    {   y = (j-1)/2;
        if(c[j] > c[y])
        {   temp = c[y];
            c[y] = c[j];
            c[j] = temp;
            j = y;}
        else
         break;

           }
         }
       }    
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-16 22:09:49

第一点:你不需要j上的循环,这就是你的问题所在。这是正确的,您应该将y值赋给j,但紧接着在循环中递减j,因此最终得到y- 1。您应该做的是将行j = y;更改为j = y + 1,或者将循环更改为

代码语言:javascript
复制
y = (j - 1) / 2
while (c[j] > c[y]){

   temp = c[y];
   c[y] = c[j];
   c[j] = temp;
   j = y;
   y = (j - 1) / 2;
}

第二点:请不要这样压缩你的代码。括号后面的新行更具可读性。

编辑:在C++中的完整实现如下所示:

代码语言:javascript
复制
int heapy(int *a, int *c, int z)
{
    for (int i = 0; i < z; i++){
        c[i] = a[i];
        int j = i;
        int y = (j - 1) / 2;
        while(c[j] > c[y]){
            int temp = c[y];
            c[y] = c[j];
            c[j] = temp;
            j = y;
            y = (j - 1) / 2;
        }
    }
}

如果i个元素的数组是一个堆,那么你应该在它的末端添加元素,并将它与它的父级交换,只要它们小于它。

票数 0
EN

Stack Overflow用户

发布于 2020-06-17 22:37:19

简而言之:您的程序太长了三个字符:只要删除其中的--j即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56619403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档