zrq495
www.zrq495.com

不只是堆排序,其他排序也能过,很水的题,拿来练习堆排序的。

代码:

 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 }
posted on 2012-07-21 19:01  zrq495  阅读(252)  评论(0编辑  收藏  举报