C语言实现——堆排序

代码实现

#include 
#include 
#include 
#include 
int num;
void buildheap(int *a,int i,int n)	//构造堆  
{
    int c,temp;
    for (temp=a[i];2*i<=n;i=c)	//temp记录父亲节点的值,c为其左孩子节点,//2*i<=N,i=c当结点还有孩子节点时,将i指向其左孩子节点,继续循环
    {
        c=2*i;			//i的左孩子节点编号为2*i	
        if(ca[c]) //找到i最大的孩子节点(左孩子和右孩子比较) 
            ++c;              //将最大的孩子编号给c
        if(temp=1;i--)	//从((num/2)为最后一个父亲节点)最后一个父亲节点开始构造堆,一直向上,构造到根节点。 
    {
        buildheap(a,i,num);
    }
    for(i=num;i>1;i--)	//删除根节点后,重新构造堆//i>1而不i>0的原因:当i=1时二叉树中只有一个元素,而不需要对其再进行一次构造堆了,他本身就是最大的了。 
    {
        temp=a[1];
        a[1]=a[i];
        a[i]=temp;
        buildheap(a,1,i-1);
    }
}

int main(int argc, char *argv[]) 
{
    printf("堆排序\n");
    printf("请输入要排序的元素的个数:"); 
    scanf("%d",&num);
    int i,a[num+1];
    printf("请输入元素:");
    for(i=1;i

结果演示

C语言实现——堆排序_第1张图片

 

你可能感兴趣的:(c语言,排序算法)