首页 > 编程语言 > 详细

堆排序

时间:2015-10-09 16:55:21      阅读:141      评论:0      收藏:0      [点我收藏+]
#include<stdio.h>
#define LEFT(i) (2*(i))
#define RIGHT(i) (2*(i)+1)
#define length 10
int A[length]={4,1,3,2,16,9,10,14,8,7};
int heapsize=length;
void MAX_HEAPIFY(int*A,int i)//堆的维护
{    
    int temp;
    int largest;
    int l=LEFT(i);
    int r=RIGHT(i);
    if(l<=heapsize&&A[l-1]>A[i-1])
        largest=l;
    else largest=i;
    if(r<=heapsize&&A[r-1]>A[largest-1])
        largest=r;
    if(largest!=i)
        {
            temp=A[i-1];
            A[i-1]=A[largest-1];
            A[largest-1]=temp;
            MAX_HEAPIFY(A,largest);
        }
}
void BUILD_MAX_HEAP(int*A)//建立最大堆
{
    int i=length/2;
    while(i>=1)
    {
        MAX_HEAPIFY(A,i);
        i--;
    }
}
void HEAPSORT(int*A)//堆排序
{
    int temp;
    BUILD_MAX_HEAP(A);
    int i=length;
    while(i>=1)
        {
            temp=A[i-1];
            A[i-1]=A[0];
            A[0]=temp;
            heapsize--;
            MAX_HEAPIFY(A,1);
            i--;
        }
}
void PRINTALL(int*A)//打印排序结果
{
    int i=1;
    while(i<=length)
    {
        printf("%d\t",A[i-1]);
        i++;
    }
    printf("\n");
}
int main(void)
{
    HEAPSORT(A);
    PRINTALL(A);
    return 0;
}

 

堆排序

原文:http://www.cnblogs.com/knowanddo/p/4864358.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!