唯一坚持的任性 2019-04-18 23:05 采纳率: 0%
浏览 240

C语言,堆排序的代码运行显示“heapsort”: 找不到标识符?求大神帮忙

#include
#include

#define N 14
typedef int KeyType;
typedef int InfoType;
typedef int SeqList;
typedef struct
{

KeyType key;
InfoType otherinfo;
}RecType;
void main()
{
int i,n;
RecType R[N];
printf("请输入将要排序元素的个数:");
scanf("%d", &n);
printf("\n");
for(i=0; i < n; i++)
{
printf("请输入第%d个数为:",i+1);
scanf("%d",&R[i]);
}
printf("排序前的数据:\n"); //打印排序前的数据

for (int i = 0; i < n; i++)

{

printf("%d ",R[i]);

}

heapsort(R);
printf("\n排序后的数据:\n"); //打印排序后的数据
for (i = 0;i < n;i++)
printf("%d ",R[i]);
printf("\n");
system("pause");
}
void max_heapify(RecType R[],int k,int m) //用筛选法调整堆
{
RecType t;
int i,j,x;

t=R[k];
x=R[k].key;
i=k;
j=2*i;
while(j<=m)
{
    if (j<m && R[j].key<R[j+1].key)
    j=j+1;
    if(x<R[j].key)
    {
        R[i]=R[j];
        i=j;
        j=2*i;
    }
    else
        break;
}
R[i]=t;

}
void build_max_heap(RecType R[],int n) //建大根堆算法
{
int i;

for (i = n/2;i >= 1;i--)
    max_heapify(R,i,n);

}
void heapsort(RecType R[]) //堆排序的算法
{

int i,n;

build_max_heap(R,n);
for (i = n;i >1;i--)
{
    R[0] = R[1];
    R[1] = R[i];
    R[i] = R[0];
    max_heapify(R,1,i-1);
}

}


  • 写回答

1条回答 默认 最新

  • 浅草夏洛洛 2019-04-20 22:23
    关注

    只说下语法问题,在你的主函数中
    RecType R[N];
    scanf("%d",&R[i]);
    R是一个结构体数组,不能直接赋值,可以改成scanf("%d",&R[i].key)或者scanf("%d",&R[i].otherinfo)

    在你的heapsort函数中

    void heapsort(RecType R[]) //堆排序的算法
    {
        int i,n;
        build_max_heap(R,n);
        for (i = n;i >1;i--)
        {
            R[0] = R[1];
            R[1] = R[i];
            R[i] = R[0];
            max_heapify(R,1,i-1);
        }
    }
    

    变量n并没有赋值哦。

    评论

报告相同问题?

悬赏问题

  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的