我目前在使用这个heapsort时遇到了一些麻烦,我在编译时没有错误,但是,当我运行该程序时,它会崩溃,因为在Windows中它崩溃了,终端中没有输出,只有来自视窗。这是代码。该文件是一个简单的逐行文件,其中包含数字,其中包含10,000个元素。
#include<stdio.h>
void heapsort(int[],int);
void heapify(int[],int);
void adjust(int[],int);
int main() {
int n,i,a[10000];
// printf("\nEnter the limit:");
FILE *file;
file = fopen("input.txt", "r");
int j=0;
int num;
while(fscanf(file, "%d", &num) > 0) {
a[j] = num;
j++;
}
fclose(file);
// scanf("%d",&n);
// printf("\nEnter the elements:");
// for (i=0;i<n;i++)
// scanf("%d",&a[i]);
heapsort(a,n);
printf("\nThe Sorted Elements Are:\n");
for (i=0;i<n;i++)
printf("\t%d",a[i]);
printf("\n");
return 0;
}
void heapsort(int a[],int n) {
int i,t;
heapify(a,n);
for (i=n-1;i>0;i--) {
t = a[0];
a[0] = a[i];
a[i] = t;
adjust(a,i);
}
}
void heapify(int a[],int n) {
int k,i,j,item;
for (k=1;k<n;k++) {
item = a[k];
i = k;
j = (i-1)/2;
while((i>0)&&(item>a[j])) {
a[i] = a[j];
i = j;
j = (i-1)/2;
}
a[i] = item;
}
}
void adjust(int a[],int n) {
int i,j,item;
j = 0;
item = a[j];
i = 2*j+1;
while(i<=n-1) {
if(i+1 <= n-1)
if(a[i] <a[i+1])
i++;
if(item<a[i]) {
a[j] = a[i];
j = i;
i = 2*j+1;
} else
break;
}
a[j] = item;
}
答案 0 :(得分:2)
未初始化本地(自动)变量。您正在将n
传递给已定义但未初始化的函数heapsort
。我看到注释掉的代码会起作用,因为n
是一个输入值。最好将j
更改为n
以保持一致。
答案 1 :(得分:1)
int n,i,a[10000]; // doesn't initialize n, This is just a declaration
标准ISO / IEC 9899:201x 6.7.9-> 10州
如果未初始化具有自动存储持续时间的对象 显然,它的价值是不确定的。
然后你是
heapsort(a,n); // calling heapsort with arbitrary n
您可以考虑更改
fscanf(file, "%d", &num) > 0
到
fscanf(file, "%d", &num) == 1
正如你所说:
该文件是一个简单的逐行文件,其中包含数字 其中有10,000个元素。