冒泡排序
C++版本
#include <iostream>
#include <vector>
using namespace std;
/*
*基础班冒泡排序,没有flag标志位
*升序
*/
vector<int> BubbleSort_base(vector<int> &arr) {
int temp; //临时变量存储值
int n = arr.size();
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n - i - 1; j++) {
//发生逆序,交换值
if (arr[j] > arr[j + 1]) {
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
/*
*进阶版冒泡排序,右flag标志位
*升序
*/
vector<int> BubbleSort_Pro(vector<int> &arr) {
int flag = 1; //1表示发生逆序,0表示没有发生逆序
int temp;
int n = arr.size();
for (int i = 0; i < n - 1 && flag == 1; i++) {
//每一趟设定没有发生逆序,如果后面没有更改flag的值,
//表示没有发生逆序,已经有序了,后面的就不需要执行了
flag = 0;
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
flag = 1; //发生逆序,flag置 1
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
void printfVector(const vector<int> arr) {
for (auto it = arr.begin(); it != arr.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
int main() {
vector<int> arr = {5, 4, 3, 2, 1};
printfVector(arr);
auto ret = BubbleSort_Pro(arr);
printfVector(ret);
return 0;
}