冒泡排序基于比较的的简单排序算法。它的基本原理:通过相邻元素的两两比较,如果第一个元素比第二个元素大,则交换它们,排序这样将最大(最小)元素放到无序数据的末尾,若无数据交换,则实现数据全部有序。
算法描述:
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 重复步骤1~3,直到排序完成。
算法的时间复杂度:
冒泡排序与初始数据的有序性相关。该算法的平均时间复杂度为O(n^2),最坏时间复杂度O(n^2),最好时间复杂度O(n);
代码实现:
#include <iostream>
using namespace std;
inline void swap(int *a, int *b){
int temp = *a; *a = *b; *b = temp;
}
inline void print(int arr[], int len)
{
for(int i = 0; i != len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
void bubbleSort(int arr[], int len)
{
for(int i = 0; i != len; i++){
cout << "第" << i << "趟:" << endl;
bool isSwap = false;
for(int j = 0; j != len -1 - i; j++){
if(arr[j] > arr[j+1]){
swap(arr[j], arr[j+1]);
isSwap = true;
}
}
print(arr, len);
if(!isSwap)
break;
}
}
int main()
{
int arr[10] = { 1,2,3,4,7,8,5,9,10,14 };
cout << "原始数据:" << endl;
print(arr, 10);
bubbleSort(arr, 10);
}
运行结果:
原始数据:
1 2 3 4 7 8 5 9 10 14
第0趟:
1 2 3 4 7 5 8 9 10 14
第1趟:
1 2 3 4 5 7 8 9 10 14
第2趟:
1 2 3 4 5 7 8 9 10 14