首页 > 技术文章 > Out of Sorts

kingwz 2021-12-05 15:56 原文

题面描述:
对于给出的数据若是冒泡排序一次,便会打印“moo”。
求会打印几次“moo”。
题目分析:
思维题,
根据冒泡排序的原理:每次找一个最大的数放到后面,其他的数被动前移或不变。
例如:
0 2 9 3 8 5 4 7
冒泡一次变成0 2 3 8 5 4 7 9(此时 3 6 5 4 7 各向前移动了一位)
冒泡两次变成0 2 3 5 4 7 8 9(此时 5 4 7 各向前移动了一位)
冒泡三次变成0 2 3 4 5 7 8 9(此时 4 向前移动了一位)

观察可以发现冒泡排序的次数就是向前移动的最大位数 ,
而“moo”的次数是 3+1=4 次,即是答案。

代码:

#include<algorithm>
#include<stdio.h> 
#include<iostream>
#include<string.h> 
#include<queue>
#include<vector>
using namespace std;
long long ans=-1,i,n;
struct num{
	long long num,pos;
}a[100005];

bool cmp(num a,num b){
	if(a.num!=b.num) return a.num<b.num;
	else return a.pos<b.pos;
}

int main(){
	cin>>n;
	for(i=1;i<=n;i++) cin>>a[i].num,a[i].pos=i;
	sort(a+1,a+1+n,cmp);
	for(i=1;i<=n;i++) ans=max(ans,a[i].pos-i+1);
	cout<<ans;
}


推荐阅读