/*
冒泡排序:每次两两比较,把大的方后面,直到把最大的排到最后。
区别:冒泡排序右边有序,插入排序左边有序;冒泡排序凉凉比较,插入排序逐一比较
稳定性:稳定排序,每次排序只比较相邻位置,不改变相等元素的位置
时间复杂度:O(n^2)
空间复杂度:O(1)
*/
#include<iostream>
using namespace std;
int main() {
int a[8] = { 36,25,48,12,25,43,20,28 }; //给定数组
int len = 8; //直接给出长度
//冒泡排序
int flag; //判断是否发生交换的标志位
for (int i = 0; i < len; i++) {
flag = 0; //每次初始化为没有发生交换
for (int j = 0; j < len - i - 1; j++) {
if (a[j] > a[j + 1]) {
//swap(a[j], a[j + 1]); //使用自带的交换函数
int temp = a[j]; //手写交换函数
a[j] = a[j + 1];
a[j + 1] = temp;
flag = 1; //发生了交换
}
}
if (flag == 0) { //如果没有发生交换,说明排序完成,则提前结束
break;
}
}
//打印输出
for (int i = 0; i < len - 1; i++) {
cout << a[i] << " ";
}
cout << a[len - 1] << endl;
return 0;
}