C 堆排序纠错

来源:百度知道 编辑:UC知道 时间:2024/05/10 23:28:03
#include<stdio.h>
#define MARX 0 //占据a[0],不起实际作用

static a[11] = {MARX,25,4,36,1,60,10,58,14,47,18};
int count = 1;
void heap(int n);// 建立堆的函数
void adjust(int i, int n);//辅助函数

int main(void)
{
int i;
printf("源数据为:");
for(i=1;i<11;i++)
printf("%5d", a[i]);
heap(10);
printf("\n排序后的数据为: ");
for(i=1;i<11;i++)
printf("%5d", a[i]);
printf("\n");
return 0;
}
void heap(n)//将一个长度为n的无序序列编程为堆序列——报错说n没有声明 ???
int n;//序列长度——此行也报错了???
{
int i,j,t;
for(i=n/2;i>0;i--)
adust(i,n);//将第i个结点变为堆
printf("\n初始化成堆====> ");
for(i=1;i<11;i++)
printf("%5d", a[i]);
for(i=n-1;i>0;i--)
{
//将堆序列中堆顶的值与未排序序列中的最后一个数对调
t = a[i+1];
a[i+1] = a[1];
a[1] = t;
adjust(1,i);//重新生成堆排序
printf("\n第%

void heap(n)//将一个长度为n的无序序列编程为堆序列——报错说n没有声明 ???

这里你要写 void heap(int n)

int n;//序列长度——此行也报错了???

这一行如果你是指前面heap(n)里面的n,那么这是多余的,heap(int n)是正确格式

如果这一行你是想定义一个本地变量,那么第一,这个变量名n和参数里面的n定义重复,需要改一个名字,而且这个定义应该在函数括号内,如下:

void heap(int n) {
int n; // <--改个名字.
...
}