冒泡排序基本思想
1.目标:N个乱序的数,将其以由小到大的方式排序;
2.思想方法:循环遍历N-1趟,每一趟中从第一个数开始遍历,每个数与后一个数比较大小,若比后一个数大,则两数交换,直到最大的数落在其应在的位置上。
3.终止条件:N-1趟全部循环完成,或者某一趟中没有发生两数交换(已经排好序了)。
4.时间复杂度:o(n*n)
循环方法的代码实现
#include <iostream>
#include <vector>
using namespace std;
//冒泡排序
void bubbleSort(vector<int>& arr) {
int n = arr.size();
for (int i = n-1; i > 0 ; i--) { //最多循环n-1轮
int flag = 0;
for (int j = 0; j < i ; j++) { //每轮循环,从头开始遍历,i之后的已排好序不用再比
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
flag = 1;
}
}
if (flag == 0) { //若此轮循环未发生元素调动,则表明已经有序,提前停止
break;
}
}
}
//打印数组
void printArray(vector<int>& arr) {
for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << " ";
}
cout << endl;
}
//测试
int main() {
vector<int> arr1 = { 5, 1, 4, 2, 8 };
vector<int> arr2 = { 4, 2, 7, 3, 1, 6, 5 };
cout << "排序前: ";
printArray(arr1);
bubbleSort(arr1);
cout << "排序后: ";
printArray(arr1);
cout << "排序前: ";
printArray(arr2);
bubbleSort(arr2);
cout << "排序后: ";
printArray(arr2);
return 0;
}