首页 > 代码库 > ②2017=5.13-7.1

②2017=5.13-7.1

                         1/50


这里都没有发题目,随手解析,大部分是供自己思考反思作用,思路、题目等有不少来自各种资料。大部分有附代码,需要题目自行搜索引擎。

我又开坑啦,考虑到还是以文化课为重,这次五十题给了很多时间,希望能及时刷完…

目前已涉及的算法有:堆。

1.建堆+堆排序

技术分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 int h[101];
 6 int n;
 7 void swap(int x,int y)
 8 {
 9     int t;
10     t=h[x];
11     h[x]=h[y];
12     h[y]=t;
13 }
14 void siftdown (int i)
15 {
16     int t,flag=0;
17     while (i*2<=n && flag==0) {
18         if (h[i]>h[i*2]) t=i*2;
19         else t=i;
20         if (i*2+1<=n) {
21             if (h[t]>h[i*2+1]) t=i*2+1;
22         }
23         if (t!=i) {
24             swap(t,i);
25             i=t;
26         }
27         else flag=1;
28     }
29 }
30 void creat()
31 {
32     int i;
33     for (i=n/2; i>=1; i--) siftdown(i);
34 }
35 int deletemax()
36 {
37     int t;
38     t=h[1];
39     h[1]=h[n];
40     n--;
41     siftdown(1);
42     return t;
43 }
44 int main()
45 {
46     int i,num;
47     scanf("%d",&num);
48     for (i=1; i<=num; i++) scanf("%d",&h[i]);
49     n=num;
50     creat();
51     for (i=1; i<=num; i++) printf("%d ",deletemax());
52     getchar();
53     return 0;
54 }
建堆+堆排序

修建中…

②2017=5.13-7.1