キーポイント:データを左から右にスキャンし、最大のデータを選択して、右側に配置します
コード:
#include <iostream>
using namespace std;
void bubble_sort(int list[], int n)
{
for (int i = 0; i < n - 1; i++) //比较n-1次
{
for (int j = 0; j < n - 1 - i; j++) //每一次循环少比较一次
{
if(list[j]> list[j + 1])
swap(list[j], list[j + 1]);
}
}
}
int main()
{
int arry[10] = {2,1,4,5,9,8,6,7,3,0};
bubble_sort(arry,sizeof(arry)/sizeof(arry[0]));
for (int i = 0; i < sizeof(arry) / sizeof(arry[0]); i++)
cout << arry[i] << " ";
cout << endl;
return 0;
}
演算結果:
バブルソート法の時間計算量:
比較の数:1 + 2 + ... + N-3 + N-2 + N-1 =(1 +(N-1))*(N-1)/ 2 = N ^ 2 / 2-N / 2
交換の数:1 + 2 + ... + N-3 + N-2 + N-1 =(1 +(N-1))*(N-1)/ 2 = N ^ 2 / 2-N / 2
したがって、バブリングの時間計算量は(N ^ 2 / 2-N / 2)+(N ^ 2 / 2-N / 2)= N ^ 2-Nです。
最終的な時間計算量は次のとおりです。O(N ^ 2)