A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唯有繁星 中级黑马   /  2015-12-5 23:29  /  605 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


1 //删除堆顶之后把最后一个移到堆顶在调整,慢
2
3 #include <iostream>
4 #include <cstring>
5 #include <cstdio>
6 #include <algorithm>
7 using namespace std;
8
9 const int N = 100;
10 int h[N];
11 int n;
12 void shitdow(int i)
13 {
14     int t,flag = 1;
15     while(i * 2 <= n && flag)
16     {
17         if(h[i * 2] < h[i])
18             t = i * 2;
19         else
20             t = i;
21
22         if(i * 2 + 1 <= n)
23         {
24             if(h[t] > h[i * 2 + 1])
25                  t = i * 2 + 1;
26         }
27         if( t != i)
28         {
29             swap(h[i],h[t]);
30             i = t;
31         }
32         else
33             flag = 0;
34     }
35 }
36 void create()
37 {
38     for(int i = n / 2; i >= 1; i--)
39         shitdow(i);
40
41 }
42 int deletemax()
43 {
44    int t = h[1];
45    h[1] = h[n];
46    n--;
47    shitdow(1);
48    return t;
49 }
50 int main()
51 {
52     int tn;
53     scanf("%d",&n);
54     for(int i = 1; i <= n; i++)
55         scanf("%d",&h[i]);
56     create();
57     tn = n;
58     for(int i = 1; i <= tn; i++)
59     {
60         printf("%d ",deletemax());
61     }
62
63     return 0;
64 } 小顶堆


1 //堆顶一定是最大的,然后将堆顶跟最后一个交换,更新
2
3 #include <iostream>
4 #include <cstring>
5 #include <cstdio>
6 #include <algorithm>
7 using namespace std;
8
9 const int N = 100;
10 int h[N];
11 int n;
12 void shitdow(int i)
13 {
14     int t,flag = 1;
15     while(i * 2 <= n && flag)
16     {
17         if(h[i * 2] > h[i])
18             t = i * 2;
19         else
20             t = i;
21
22         if(i * 2 + 1 <= n)
23         {
24             if(h[t] < h[i * 2 + 1])
25                  t = i * 2 + 1;
26         }
27         if( t != i)
28         {
29             swap(h[i],h[t]);
30             i = t;
31         }
32         else
33             flag = 0;
34     }
35 }
36 void create()
37 {
38     for(int i = n / 2; i >= 1; i--)
39         shitdow(i);
40
41 }
42 void heapsort()
43 {
44     while(n > 0)
45     {
46         swap(h[1],h[n]);
47         n--;
48         shitdow(1);
49     }
50 }
51 int main()
52 {
53     int tn;
54     scanf("%d",&n);
55     for(int i = 1; i <= n; i++)
56         scanf("%d",&h[i]);
57     create();
58     tn = n;
59     heapsort();
60     for(int i = 1; i <= tn; i++)
61     {
62         printf("%d ",h[i]);
63     }
64
65     return 0;
66 } 大顶堆

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马