//冒泡排序:每一趟排序使关键字小的元素冒到前面,从后往前两两对比元素大小
//具有稳定性:两个元素值相同,不交换位置
//顺序表和链表都可以实现,本文采用顺序表实现
//时间复杂度O(n^2)
#include <iostream>
using namespace std;
int a[]={30,20,70,40,90,10};
int n=sizeof(a)/sizeof(int);
int main(){
//元素个数为n个的序列,至多需要n-1趟
//另外一种解释,将i定义为为当前数组的第i+1位置确定元素
bool flag;
for(int i=0;i<n-1;i++){
//前面已经确定最终位置的元素不用再对比
flag=false;
//从后往前两两比较
for(int j=n-1;j>i;j--){
//交换次数等于比较次数
if(a[j]<a[j-1]){
//注意区分交换次数和移动次数,每次交换都需要移动元素3次
swap(a[j],a[j-1]);
flag=true;
}
}
//若某一趟排序没有发生交换,说明此时已经整体有序,算法提前结束
if(!flag){
break;
}
}
//输出
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
}
说明:本文为个人学习理解总结。