冒泡排序
1 基本思想
以从小到大排序为例,冒泡排序检查当前位置元素与其后面相邻位置元素的大小,如果小于后面的元素,则将这两个元素交换,重复执行交换的过程直到序列有序。
2 代码实现
#include <iostream>
using namespace std;
void BubbleSort(int* arr, int n);
void Swap(int& a, int& b);
void Print(int* arr, int n);
void Swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
void Print(int* arr, int n) {
for (int i = 0; i < n; ++i) {
cout << arr[i] << ' ';
}
cout << endl;
}
/**
* 从小到大排序
*/
void BubbleSort(int* arr, int n) {
bool flag = true; // 是否调整标志位
int pos = 0;
int len = n - 1;
for (int i = 0; i < n - 1; ++i) {
flag = true;
for (int j = 0; j < len; ++j) {
if (arr[j] > arr[j + 1]) {
Swap(arr[j], arr[j + 1]);
pos = j;
flag = false;
}
}
len = pos;
if (flag) {
break;
}
}
}
int main()
{
int arr[] = {6, 4, 7, 2, 8, 5, 9, 10, 11};
Print(arr, 9);
BubbleSort(arr, 9);
Print(arr, 9);
return 0;
}
3 复杂度分析
时间复杂度:最坏情况下 O(N^2)。
空间复杂度:O(1)。