题源:*航*系 数据结构作业
【问题描述】对一含有n个整数的数组,使用堆排序将其由小到大排序。
【输入形式】第一行为元素个数n,第二行为n个整数(以空格隔开)。
【输出形式】输出n个整数(以空格隔开)
【样例输入】
6
43 2 56 1 22 9
【样例输出】
1 2 9 22 43 56
============================================
#include <stdio.h> #include <stdlib.h> void adjust ( int a[],int i,int n ); void heapSort ( int a[],int n); int main() { int n; int i; int a[1024] = {0}; scanf("%d",&n); for( i = 0; i < n; i++) scanf("%d",&a[i]); heapSort(a,n); for( i = 1; i <= n; i++) printf("%d ",a[i]); return 0; } void adjust ( int a[],int n ) { int j; int temp; temp = a[i]; j = 2*i; while ( j <= n ) { if ( j < n && a[j] < a[j+1] ) j++; if ( temp >= a[j] ) break; a[j/2] = a[j]; j = 2*j; } a[j/2] = temp; } void heapSort ( int a[],int n) { int i; int temp; for ( i = n/2; i >= 0; i--) adjust(a,i,n); for ( i = n-1; i >= 0; i--) { temp = a[i+1]; a[i+1] = a[0]; a[0] = temp; adjust(a,i); } }