竞赛
考级
Alxe
#include<bits/stdc++.h> using namespace std; int a[10001]; int n; void f(int l,int r) { if(l<r) { int mid=(l+r)/2; cout<<"["; for(int i=l;i<=mid;i++) cout<<a[i]<<" "; cout<<"],["; for(int i=mid+1;i<=r;i++) cout<<a[i]<<" "; cout<<"]"<<endl; f(l,mid); f(mid+1,r); } } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; f(1,n); return 0; }
FBL
对半分,循环输入要从1开始,不然对半分会出问题
unusual flower
AndyEggy
亚洲卷王 AK IOI
【算法分析】 定义 DivideDivideDivide 函数对 aaa 数组递归的进行划分输出,参数有 aaa 数组,lll、rrr,lll 和 rrr 分别表示划分前的第一个位置和最后一个位置。 递归的结束条件是划分到只有一个元素时:l >= r。 int mid = (l + r) / 2;,midmidmid 为划分的中间位置,先输出前半部分 lll~midmidmid,再输出后半部分 mid+1mid+1mid+1~rrr。然后划分前半部分并输出:Divide(a, l, mid);,再划分后半部分并输出:Divide(a, mid + 1, r);。 【参考代码】 【时间复杂度】 O(log2n)O(log_2n)O(log2 n) 【预计得分】 100pts100pts100pts
AC君
LOVEKlee1314
132****3426
L
xerography
#include<bits/stdc++.h> using namespace std; int a[105]; int n,m; void m_sort(int l,int r){ m=(l+r)>>1;//(l+r)/2 二分 if(l>=r) return; cout<<"["; for(int i=l;i<=mid;i++){ cout<<a[i]<<" "; } cout<<"],["; for(int i=mid+1;i<=r;i++){ cout<<a[i]<<" "; } cout<<"]"<<endl; m_sort(l,m);//左边再次二分//递归规律 m_sort(m+1,r);//右边再次二分 } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; }
青梧叶
直接上代码!
🎈🎈🎈🎈🎈🎈🎈🎈
西外豚鼠精神状态良好