#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; }