冒泡排序簡介:
- 冒泡排序是一種比較簡單的排序算法,根據一個序列,比較兩個元素,如果順序不對就交換。
- 然后依次遍歷n個點,一次找出一個最大(最小)值,進行n次,完成排序。
代碼實現
基礎冒泡排序
#include<iostream>
using namespace std;
int main()
{
int a[9] = {1,9,2,5,8,3,7,4,6};
int i,j;
for(i=0;i<9;i++)
{
for(j=8;j>i;j--)
{
if(a[j-1] < a[j])
{
int temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
}
}
for(int i=0;i<9;i++)
cout << a[i] << " ";
return 0;
}
這種冒泡排序無論如何都要執行兩層循環,因此無論最優最差時間復雜度均為O(n^2)。
改良版冒泡排序
- 設置flag,如果上一次有交換,那么設為true,如果沒有交換,說明排序已完成,設為false,此時最優時間復雜度為O(n)(即排序一次就知道不用排了)
//只完成一輪循環的冒泡排序
#include<iostream>
using namespace std;
int main()
{
int a[9] = {9,8,7,6,5,4,3,1,2};
int i,j;
for(i=0;i<9;i++)
{
bool flag = false;
for(j=8;j>i;j--)
{
if(a[j-1] < a[j])
{
int temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
flag = true;
}
}
if(flag == false)
break;
}
for(int i=0;i<9;i++)
cout << a[i] << " ";
return 0;
}