由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。我们现在的问题是,我们用冒泡排序对给定序列排序时所需要的冒泡趟数是多少呢?
第一行是测试数据的总组数,总组数不超过100组。
接下来每个测试数据由两行组成,第一行为序列的长度,序列长度不超过10000,接下来为要处理的序列,序列中没有相同数字,每个数字不超过10000。
每组数据对应一行输出,输出趟数。
351 2 3 4 543 2 4 122 1
031
这道题其实我是靠猜的,趟数必定是现在所在的位置与排序后的位置之差最大的
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int a[10005],hash[10005],now[10005]; int main() { int n,t,i,j; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i = 0; i<n; i++) { scanf("%d",&a[i]); now[a[i]] = i; } sort(a,a+n); for(i = 0; i<n; i++) hash[a[i]] = i; int maxn = 0; for(i = 0; i<n; i++) { if(now[a[i]]-hash[a[i]]>maxn) maxn = now[a[i]]-hash[a[i]]; } printf("%d\n",maxn); } return 0; }