堆排序

#include <stdio.h>
#include <stdlib.h>

#define MAX_NUMBER 10
void swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}

void heap_sort(int data[],int length)
{
int i,j,root_index;
for(i=length-1;i>0;i--)
{
for(j=i;j>0;j--)
{
if(j%2 ==0)
root_index = (j-2) / 2;
else 
root_index = (j-1) / 2;
if(data[root_index] < data[j])    //从小到大排序
swap(&data[root_index],&data[j]);    //将最大值递归提取到根节点
}
swap(&data[j],&data[i]);    //此时j已经是0了,即交换根节点与队列最后的值
}
}
int main()
{
int random[MAX_NUMBER];
int i;
for(i=0;i< MAX_NUMBER;i++)
{
random[i] = rand()%MAX_NUMBER;
printf("random[%d]=%d
",i,random[i]);
}
heap_sort(random,MAX_NUMBER);
for(i=0; i< MAX_NUMBER; i++)
{
printf("%d
",random[i]);
}



return 0;
}
原文地址:https://www.cnblogs.com/edver/p/12589839.html