请问这个用C语言写的堆排序算法错在哪里
#include<stdio.h>
#include<math.h>
int left(int i)
{ return (i*2);
}
int right(int i)
{ return (i*2+1);
}
void exchange(int A[],int i,int j)
{ int temp;
temp=A[i-1]; A[i-1]=A[j-1]; A[j-1]=temp;
}
void MAX_HEAPIFY(int A[10],int i,int length,int heapsize)
{ int l,r,largest;
l=left(i); r=right(i);
if(l<=heapsize && A[l-1]>A[i-1])
largest=l;
else
largest=i;
if(r<=heapsize && A[r-1]>A[i-1])
largest=r;
if(i!=largest)
{ exchange(A,i,largest);
MAX_HEAPIFY(A,largest,length,heapsize);
}
}
void BUILD_HEAP(int A[10],int length,int heapsize)
{ for(int i=floor(length/2);i>=1;i--)
MAX_HEAPIFY(A,i,length,heapsize);
}
void HEAPSORT(int A[10],int length,int heapsize)
{ BUILD_HEAP(A,length,heapsize);
for(int i=length;i>1;i--)
{ exchange(A,1,heapsize--);
MAX_HEAPIFY(A,1,length,heapsize);
}
}
int main()
{ int A[10]={12,1,5,2,3,8,6,7,19,15},length=10,heapsize=10;
HEAPSORT(A,length,heapsize);
for(int i=0;i<10;i++)
printf("%d ",A[i]);
}
#include<math.h>
int left(int i)
{ return (i*2);
}
int right(int i)
{ return (i*2+1);
}
void exchange(int A[],int i,int j)
{ int temp;
temp=A[i-1]; A[i-1]=A[j-1]; A[j-1]=temp;
}
void MAX_HEAPIFY(int A[10],int i,int length,int heapsize)
{ int l,r,largest;
l=left(i); r=right(i);
if(l<=heapsize && A[l-1]>A[i-1])
largest=l;
else
largest=i;
if(r<=heapsize && A[r-1]>A[i-1])
largest=r;
if(i!=largest)
{ exchange(A,i,largest);
MAX_HEAPIFY(A,largest,length,heapsize);
}
}
void BUILD_HEAP(int A[10],int length,int heapsize)
{ for(int i=floor(length/2);i>=1;i--)
MAX_HEAPIFY(A,i,length,heapsize);
}
void HEAPSORT(int A[10],int length,int heapsize)
{ BUILD_HEAP(A,length,heapsize);
for(int i=length;i>1;i--)
{ exchange(A,1,heapsize--);
MAX_HEAPIFY(A,1,length,heapsize);
}
}
int main()
{ int A[10]={12,1,5,2,3,8,6,7,19,15},length=10,heapsize=10;
HEAPSORT(A,length,heapsize);
for(int i=0;i<10;i++)
printf("%d ",A[i]);
}
...全文
相关推荐
堆排序算法 C语言实现
C语言实现的堆排序算法。 提供了堆排序算法的一个接口,可以为其它功能提供功能。
堆排序C语言实现
描述"算法导论之堆排序,C语言实现版"表明这个话题是基于经典的《算法导论》这本书,这是一本深入讲解计算机算法的权威教材。C语言实现版意味着我们将按照书中的理论,用C语言编写出堆排序的程序。
c语言实现堆排序算法
### c语言实现堆排序算法堆排序是一种基于比较的排序算法,它利用了二叉堆的数据结构特性来高效地对数据进行排序。
c语言实现堆排序算法 heapsort
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序的平均时间复杂度为
C语言对堆排序一个算法思路和实现代码
"这篇资源主要介绍了C语言实现堆排序的算法思路和具体代码。堆排序是一种基于树形选择的排序方法,是对直接选择排序的优化。它通过构建和调整堆来实现排序,最终达到O(nlog2n)的时间复杂度。在C语言中


