归并排序
来源:互联网 发布:网络女主播自我介绍 编辑:程序博客网 时间:2024/05/16 01:37
分成1 2元数组排序,然后逐步归并两个数组。
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;#define T 1000000#define INF 999999int n,a[T],tmp[T];void bs(int *a, int l, int r){ int t=(l+r)/2; int c1=l,c2=t+1; for(int i=l;i<=r;i++) { if(a[c1]<a[c2]) tmp[i]=a[c1++]; else tmp[i]=a[c2++]; if(c2>r) for(i=i+1;i<=r;i++) tmp[i]=a[c1++]; if(c1>t) for(i=i+1;i<=r;i++) tmp[i]=a[c2++]; } for(int i=l;i<=r;i++) a[i]=tmp[i];}void msort(int *a,int l,int r){ if(l>=r) return ; if(l+1==r) { if(a[l]>a[r]) swap(a[l],a[r]); return ; } int t=(r+l)/2; msort(a,l,t); msort(a,t+1,r); bs(a,l,r);}int main (){ //freopen("a.txt","r",stdin); while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a)); for(int i=0;i<n;i++) scanf("%d",&a[i]); msort(a,0,n-1); int p=(n+1)/2; printf("%d\n",a[p-1]); /*for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl<<endl<<endl<<endl;*/ } return 0;}
阅读全文
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- java事务处理全解析
- Exchanger
- Git学习
- Android切屏的注意事项
- 智慧城市建设的具体方面
- 归并排序
- Java 虚拟机学习小结
- 移动端项目如何在手机上面做测试
- XML CDATA
- 学习笔记-Constraint_layout(约束布局)
- 产品经理是否需要做运营?
- JVM-运行时数据区(Run-time Data Areas)
- 频道
- pycharm中如何将ui文件转化为py文件,以及Pycharm和QtDesigner的集合