1.设计思路
排序的思想将一个数组按递增的顺序进行排序,将数组的第一个位置空下(下标为0),因为会导致子节点和本身同一个结点(i和2i一致),每次堆排序在下标1的位置放上了最大值,然后和最后一个元素交换位置,使之最大值依次放在最后的位置上,最后得到一个递增序列。
2. 源代码
#include<stdio.h>
#include<stdlib.h>
void HeapSort(int a[], int n)
{ int end=8,x,y,z; // 进行堆排序,每次找出最大值放在第一个元素位置 while(end-1){while(1){ int pa=end/2,tag=0;while(pa>0){if(a[pa]<a[2*pa]){x=a[pa];a[pa]=a[2*pa];a[2*pa]=x;tag=1;}if(2*pa+1<=end&&a[pa]<a[2*pa+1]){y=a[pa];a[pa]=a[2*pa+1];a[2*pa+1]=y;tag=1;}pa--;}if(!tag) break;} // 将找出的最大值与最后一个元素调换位置 z=a[1];a[1]=a[end];a[end]=z; end--;}
}
int main(void)
{int i;int a[9]={-1,3,2,5,8,4,9,6,7};HeapSort(a,9);for( i=1;i<9;i++) // 输出整体调整后的数组 {printf("%3d",a[i]);}printf("\n");return 0;
}