<分区>
我尝试在 gcc 和 turboc 中执行这段代码。在 GCC 中,它在运行时给我一个段错误,而在 Turbo 中,它在运行时再次给出一个空指针分配错误。
我试着追踪它,但我看不出问题出在哪里。
#include<stdio.h>
int heapsize;
void heapify(int a[],int i)
{
int l=2*i,r=2*i+1,largest,temp;
if(l<=heapsize && a[l]>a[i])
largest=l;
else
largest=i;
if(r<=heapsize && a[r]>a[largest])
largest=r;
if(largest!=i)
{
temp=a[i];
a[i]=a[largest];
a[largest]=temp;
heapify(a,largest);
}
}
void buildheap(int a[],int length)
{
int i;
heapsize=length;
for(i=length/2;i>=0;i--)
heapify(a,i);
}
void heapsort(int a[],int length)
{
int i,temp;
buildheap(a,length);
for(i=length-1;i>=1;i++)
{
temp=a[0];
a[0]=a[i];
a[i]=temp;
heapsize--;
heapify(a,0);
}
}
void main()
{
int a[20],i,length;
printf("ENTER THE SIZE OF YOUR ARRAY:");
scanf("%d",&length);
printf("ENTER THE ARRAY ELEMENTS: \n");
for(i=0;i<length;i++)
scanf("%d",&a[i]);
heapsort(a,length);
printf("THE SORTED ARRAY IS:");
for(i=0;i<length;i++)
printf("%d /t",a[i]);
}
注意:我使用 CLRS 中给出的堆排序算法对此进行了编码。
编辑:这是我提供的输入和我得到的错误。
chaitanya@chaitanya-laptop:~/Desktop/My prog$ ./a.out
ENTER THE SIZE OF YOUR ARRAY:5
ENTER THE ARRAY ELEMENTS:
9
5
8
7
6
Segmentation fault
编辑: 显然是 i++ 而不是 i-- 的愚蠢错误导致了这个问题。但现在似乎有一个逻辑错误,因为程序没有将排序后的数组作为输出。
ENTER THE SIZE OF YOUR ARRAY:5
ENTER THE ARRAY ELEMENTS:
2
4
3
1
9
THE SORTED ARRAY IS:3013077 4 1 9 2