m0_60346415 2022-12-01 00:35 采纳率: 100%
浏览 58
已结题

C语言 堆排序 数据结构

c语言堆排序,输出不了结果

#include <stdio.h>
#include <stdlib.h>

void swap(int *a,int *b)
{
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}

void heapify(int arr[],int n,int i)
{
    int low=i;
    int lchild=i*2+1;
    int rchild=i*2+2;
    if(lchild<n&&arr[lchild]<arr[low])
        low=lchild;
    if(rchild<n&&arr[rchild]<arr[low])
        low=rchild;
    if(low!=i)
        swap(&arr[i],&arr[low]);
    heapify(arr,n,low);
}

void B_heap(int arr[],int n)
{
    for(int i=n/2-1;i>=0;i--)
    {
        heapify(arr,n,i);
    }    
    for(int i=n-1;i>0;i--)
    {
        swap(&arr[0],&arr[i]);
        heapify(arr,i,0);
    }    
}


int main() 
{
    int arr[8]={6,11,12,16,14,15,10};
    int n=7;
    B_heap(arr,n);
    for(int i=0;i<n;i++)
    {
        printf("%d\n",arr[i]);
    }
    return 0;
}
  • 写回答

8条回答 默认 最新

  • X-道至简 2022-12-01 07:03
    关注

    代码有些地方被覆盖了 麻烦重新贴一下
    这里错了

    void heapify(int arr[],int n,int i)
    {
        int low=i;
        int lchild=i*2+1;
        int rchild=i*2+2;
        if(lchild<n&&arr[lchild]<arr[low])
            low=lchild;
        if(rchild<n&&arr[rchild]<arr[low])
            low=rchild;
        if(low!=i) { //少了大括号, 递归子堆
            swap(&arr[i],&arr[low]);
            heapify(arr,n,low);
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 12月9日
  • 已采纳回答 12月1日
  • 修改了问题 12月1日
  • 创建了问题 12月1日

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题