#include<iostream>
using namespace std;
int main(){
int n; cin>>n;
int a[n];
for(int i=0;i<n;i++){
int tmp; cin>>tmp;
a[i]=tmp;
}
int step=0;//记录交换次数
int i=1; bool flag=true;
while(flag){
flag=false;
for(int j=0;j<n-i;j++){
if(a[j]>a[j+1]){
int t=a[j]; a[j]=a[j+1]; a[j+1]=t;
flag=true;
step++;
}
}
i++;//i表示循环层数。注意和交换次数区别开
}
cout<<step;
return 0;
}
冒泡排序基本思想:
(1) 两两相邻元素依次进行比较, 让值较大的结点往下移(下沉),让值较小的结点往上移(上冒)。
(2) 在整个排序过程中,最多执行(n-1)趟。但执行的遍数可能少于(n-1),这是因为在执行某一遍的各次比较没有出现数据交换时,就不用进行下一趟比较。
整个排序过程需经过n-1趟处理