#include<stdio.h>
#include<string.h>
#define PARENT(i) (i-1)/2
#define LEFT(i) 2*i
#define RIGHT(i) 2*i+1
void swap(int *a,int *b) //swapping function//
{
int t;
t=*a;
*a=*b;
*b=t;
}
void HEAP_SORT(int a[]) //sorting the heap//
{
int i,len=0;
while(a[++len]!='\0')
//b is the sorted array//
BUILD_MAXHEAP(&a);
for(i=len;i>1;i--)
{
MAX_HEAPIFY(&a,i,len);
swap(&a[1],&a[i]);
len--;
b[len-i] =a[1];
MAX_HEAPIFY(&a,1);
}
for(i=0;b[i]!='\0';i++)
printf("%d,",b[i]);
}
void MAX_HEAPIFY(int *a,int i,int len)
{
int L,largest,r;
L=LEFT(i);
r=RIGHT(i);
if(L<=len && *(a+L)>=*(a+i))
{
largest=L;}
else
largest =i;
if(r<=len && *(a+r)>*(a+largest))
largest=r;
if(largest!=i)
{
swap(&a[i],a+largest);}
MAX_HEAPIFY(a,largest,len);
}
void BUILD_MAXHEAP(int *a)
{
int len=0,j;
for(len=0;*(a+len)!='\0';len++)
;
int i;
len--;
for(i=len/2;i>=1;i--)
MAX_HEAPIFY(a,i,len);
}
main()
{
int a[]={1,2,2,2,4,2,87,3,2,3,-1,3,-4};
HEAP_SORT(a);
return 0;
}
这是用于对数组a []进行堆排序的程序。我使用了一个指针,以便可以编辑它(原始数组)heapsort,但它没有提供所需的输出。这个程序有哪些逻辑错误?
答案 0 :(得分:1)
您在数组上使用strlen()。它只能用在字符串上。尝试在变量中保存数组长度。