アルゴリズム学習
私は機械の研究犬であり、アルゴリズムに興味があります。これは私が独学で勉強したアルゴリズムの記録です。
1日目: バブルソート
記事ディレクトリ
1. バブルソートの原理?
1. 隣接する要素を後ろから前に順番に比較します。昇順で並べ替える場合は、後の要素が前の要素よりも小さくなり、2 つの要素が交換されます。降順はその逆になります。
2. 最初のペアから最後のペアまで、隣接する要素の各ペアに対して同じことを行います。一連の比較と交換の後、最後の要素が最小 (または最大) の数値になり、この数値は後続の比較演算に参加する必要はありません。
3. すべての要素に対して上記の手順を繰り返します。
4. 比較する数値のペアがなくなるまで、要素の数を減らしながら上記の手順を繰り返します。
例は次のとおりです
2. コアコード
コードはテストされており、安定していて効果的です
//函数写在Algorithm这个类里面了,并且是用模板方式编写
//这是为了函数能适应各种类型的数据
template<class T1>
vector<T1> Algorithm::bubblesort(vector<T1> array)
{
int len = array.size();
for(int i=0;i<len-1;i++)//n-1次冒泡
{
for(int j = 0;j<len-1-i;j++)//每一次冒泡需要两两比较len—1-i次
{
//交换两数操作
int tem = array[j+1];
if(array[j] < array[j+1])//从小到大就大于号,从大到小就小于号
{
array[j+1] = array[j];
array[j] = tem;
}
}
}
return array;
}
3. アルゴリズムの複雑さの分析
バブル ソートは 2 つのネストされたループのため、複雑さは O(n2) になります。この複雑さは、大量のデータを並べ替えるのにかかる時間を考えると耐えられないため、あまり使用されません。次のセクションでは、最も一般的に使用される並べ替えアルゴリズムであるクイック ソートについて学習します。アルゴリズムの平均複雑さは O(nlogn) です。