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 }
建堆+堆排序
修建中…
时间: 2024-11-05 12:13:16