Sorting Algorithm-Bubble Sort
1464 ワード
バブルソート-Bubble Sort
Algorithm:
バブルソートは交換ソートであり、隣接するレコードのキーワードを2つ比較し、逆シーケンスであれば交換し、逆シーケンスの記録がないことを知るまでの基本思想である.
Ex:
4,3,1,2
3,1,2,4最大要素4が正しい位置にある
1,2,3,4より前の最大要素3が正しい位置に着いた
1,2,3,4の前の最大要素2が正しい位置に着いた
Code:
Optimize:
バブルソートの最適化は,シーケンスが{2,1,3,4,5,6,7,8,9}である場合,すなわち,第1および第2のキーワードが交換される必要がある以外は正常な順序である.i=1の場合、2および1が交換され、シーケンスは秩序化されているが、アルゴリズムは、データが交換されていないにもかかわらず、i=2〜9および各サイクルのjサイクルを繰り返し実行したが、その後の大量の比較は大幅に余計であった.
シーケンスがこのとき秩序化されていれば後のループ判定作業を継続しないことを実現するために,コードを改善し,タグ変数flagを増やしてこのアルゴリズムの改善を実現することができる.
コード:
Analysis:
部分的に秩序化されたシーケンスに適しています
1、時間複雑度
Worst-case:O(n^2)逆順
Best-case:O(n)が秩序化されたシーケンスであれば,改良されたコードに基づいてn-1回の比較である.
Average-case O(n^2)
2、空間複雑度:O(1)
3、Stable Sort
Algorithm:
バブルソートは交換ソートであり、隣接するレコードのキーワードを2つ比較し、逆シーケンスであれば交換し、逆シーケンスの記録がないことを知るまでの基本思想である.
Ex:
4,3,1,2
3,1,2,4最大要素4が正しい位置にある
1,2,3,4より前の最大要素3が正しい位置に着いた
1,2,3,4の前の最大要素2が正しい位置に着いた
Code:
void Bubble_Sort(vector<int> &v)
{
for (int i = 0; i < v.size(); i++)
for (int j = 0; j < v.size() - i - 1; j++)
{
if (v[j]>v[j + 1])
{
int temp = v[j];
v[j] = v[j + 1];
v[j + 1] = temp;
}
}
}
Optimize:
バブルソートの最適化は,シーケンスが{2,1,3,4,5,6,7,8,9}である場合,すなわち,第1および第2のキーワードが交換される必要がある以外は正常な順序である.i=1の場合、2および1が交換され、シーケンスは秩序化されているが、アルゴリズムは、データが交換されていないにもかかわらず、i=2〜9および各サイクルのjサイクルを繰り返し実行したが、その後の大量の比較は大幅に余計であった.
シーケンスがこのとき秩序化されていれば後のループ判定作業を継続しないことを実現するために,コードを改善し,タグ変数flagを増やしてこのアルゴリズムの改善を実現することができる.
コード:
void Bubble_Sort2(vector<int> &v) //
{
int i, j;
bool flag = true;
for (i = 0; i < v.size() && flag == true; i++)
{// ,flag=false, ,
flag = false;
for (j = 0; j < v.size() - i - 1; j++)
{
if (v[j]>v[j + 1])
{
int temp = v[j];
v[j] = v[j + 1];
v[j + 1] = temp;
flag = true;
}
}
}
}
Analysis:
部分的に秩序化されたシーケンスに適しています
1、時間複雑度
Worst-case:O(n^2)逆順
Best-case:O(n)が秩序化されたシーケンスであれば,改良されたコードに基づいてn-1回の比較である.
Average-case O(n^2)
2、空間複雑度:O(1)
3、Stable Sort