刚刚过去的模拟赛T4。(不是按难度排的)
Bxgz刚刚给弟子们讲完了选择法排序,插入法排序,还有冒泡法排序。 弟子们最喜欢的算法是“冒泡排序”。下面是弟子们写的冒泡排序伪代码。
sorted = false;
int num=0;
for(;sorted==false;)
{
sorted = true
num++;
for (i = 1 ;i<= N-1;i++)
if( A[i+1] < A[i])
{
交换 A[i]和 A[i+1]
sorted = false
}
}
cout<<num;
给定一个需要排序的数列,请确定上面的代码执行结束后,num的输出值是多少。
n≤105
然后这不就是个模拟吗,把伪代码改改就行了。
5min码完,发现排名(教练在群里发的,因为是OI赛制我们看不见)没有满分的,不是50pts就是10pts,感觉有点端倪。
O(n2) 的复杂度应该可以过 105 吧 /fad
#include<bits/stdc++.h>
using namespace std;
int n,ans;
int a[100001];
bool flag;
int main(){
cin>>n;
for(int i = 1;i<=n;i++){
cin>>a[i];
}
for(;!flag;){
flag=1;
ans++;
for(int i = 1;i<=n-1;i++){
if(a[i+1]<a[i]){
int t = a[i];
a[i] = a[i+1];
a[i+1] = t;
flag=0;
}
}
}
cout<<ans<<endl;
return 0;
}