冒泡排序:每遍历一趟就将数组中最大或最小数挑选出来,然后放在已排序区间的前面,向后冒泡。
优化:设置一个标志位,如果某一趟遍历下来,发现没有可以修改的数,说明数组已经排序完成,则立即结束之后的遍历,可以节省时间。
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:稳定
#include<iostream>
using namespace std;
void BubbleSort(int *arr, int n)
{
bool hasChange = true;
// n-1趟排序
for(int i = 1; i < n && hasChange; ++i)
{
hasChange = false;
// 两两比较,每一趟排序将获得最大的数值,放置在尾部
for(int j = 0; j < n - i; ++j)
{
if(arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
hasChange = true;
}
}
}
}
int main()
{
int arr[] = {21,3,122,12131,7,-1,-9,0};
BubbleSort(arr, 8);
for(int i = 0; i < 8; ++i)
{
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
结果:
-9 -1 0 3 7 21 122 12131