这个heapsort程序在c不工作?我使用指针来编辑数组元素

时间:2016-06-28 16:12:13

标签: c heapsort

#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,但它没有提供所需的输出。这个程序有哪些逻辑错误?

1 个答案:

答案 0 :(得分:1)

您在数组上使用strlen()。它只能用在字符串上。尝试在变量中保存数组长度。