不只是堆排序,其他排序也能过,很水的题,拿来练习堆排序的。
代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int a[1000002]; 5 6 void heapadjust(int *a, int k, int n) 7 { 8 int i, j; 9 i=k; 10 j=2*i; 11 a[0]=a[i]; 12 while(j<=n) 13 { 14 if ((j<n) && a[j]>a[j+1]) 15 j++; 16 if (a[0]>a[j]) 17 { 18 a[i]=a[j]; 19 i=j; 20 j=2*i; 21 } 22 else 23 break; 24 } 25 a[i]=a[0]; 26 } 27 28 void heapsort(int *a, int n) 29 { 30 int j; 31 for (j=n/2; j>=1; j--) 32 heapadjust(a, j, n); 33 for (j=n; j>1; j--) 34 { 35 a[0]=a[j]; 36 a[j]=a[1]; 37 a[1]=a[0]; 38 heapadjust(a, 1, j-1); 39 } 40 } 41 42 int main() 43 { 44 int n, m, i; 45 while(scanf("%d%d", &n, &m)==2) 46 { 47 for (i=1; i<=n; i++) 48 scanf("%d", &a[i]); 49 heapsort(a, n); 50 if (m>n) 51 m=n; 52 for (i=1; i<=m; i++) 53 { 54 printf("%d", a[i]); 55 if (i==m) 56 printf("\n"); 57 else 58 printf(" "); 59 } 60 } 61 }