分治排序

#include<iostream> #include<string.h> #include<string> using namespace std; int n; void merge(int a[],int p,int q,int r)//合并 { int L[20]={0},R[20]={0}; int n1=q-p+1,n2=r-q; for(int i=0;i<n1;++i) L[i]=a[p+i]; for(int i=0;i<n2;++i) R[i]=a[q+1+i]; int i=0,j=0,k; for( k=p;k<=r;++k) { if(i>=n1||j>=n2) break; if(L[i]<=R[j]) a[k]=L[i],i++; else {a[k]=R[j];j++;} } if(i>=n1&&j>=n2) return; if(i>=n1&&j<n2) { for(int s=k;s<=r;++s) a[s]=R[j++]; } if(i<n1&&j>=n2) { for(int s=k;s<=r;++s) a[s]=L[i++]; } } void merge_sort(int a[],int p,int r)//分解 { if(p<r) { int q=(p+r)/2; merge_sort(a,p,q); merge_sort(a,q+1,r); merge(a,p,q,r); } } int main() { while(1) { int a[20]; cin>>n; for(int i=0;i<n;++i) cin>>a[i]; merge_sort(a,0,n-1); for(int i=0;i<n;++i) cout<<a[i]<<" "; cout<<endl; } return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值