[クラシック]バブルソートアルゴリズム

バブルアルゴリズム

バブルソート順次隣接する二つの数値の大小を比較し、発泡配列の一端から他端まで開始します。

セット配列の長さはNです。

1。以前のデータは、データのバックより大きいまたは小さい場合、隣接する二つのデータの各ラウンドの前と後の比較は、2件のデータが交換されます。

2。N-1位で最初のデータへのアレイの最大値または最小一旦横断N-1アレイデータにデータ0のこうして最初のラウンド。

インデックスN-1のデータ(最後)の最初のラウンドに3.比較は、各比較の後である-1。

する#include <stdio.hの> int型のmain(){
     int型のリスト[ 10 ] = { 5238621436745345823 }。
    int型I、J、一時;
    以下のための(iは= 0 ; I < 10 - 1 ; I ++ のための(J = 1、J < 10 - ; J ++ I 場合(リスト[J - 1 ]> 
    {

    リスト[J]) 
        TEMP =リスト[J - 1 ]。
        リスト[J - 1 ] = リスト[J]。
        リスト[J] = TEMP; 
    } 
    のためには、式(I = 0、I < 10 ; I ++ 
        のprintf(" %D \ n " 、リスト[I])。
}

 

最適化アルゴリズム

バブリング最大の問題は、それぞれの比較の関係なく、順序付けられたシーケンスのシーケンスのか、二重のループが実行されていることです。

為替のこのラウンドは、それ以外の場合は1、および0と比較して、行われた場合はここで、フラグを設定し、それを最適化。

為替への旅行がある場合は、ソートは、ソートの終わりを完了したことを示す、発生しませんでした。

する#include <stdio.hの> int型のmain(){
     int型のリスト[ 10 ] = { 5238621436745345823 }。
    int型  J、一時;
    int型   私は= 10 ;
    int型BOOL = 1 ;
    一方、BOOL 
    {     BOOL = 0 (J = 1

     
        ; J <I。J ++ 場合(リスト[J - 1 ]> リスト[J])
        { 
            TEMP =リスト[J - 1 ]。
            リスト[J - 1 ] = リスト[J]。
            リスト[J] = TEMP;
            BOOL = 1 
        } 
        I - 
    } 
    のためには、式(I = 0、I < 10 ; I ++ 
        のprintf(" %D \ n " 、リスト[I])。
}

 

 

 

グラフィックバブルソート

[8,2,5,9,7]で数字の例示的なセットを実行します。

小さなを移動するには、左から右へバブリング、右

最初のラウンドバブル:

まず、第一の大きさを比較し、二番目の数字は数字で、我々は2が8よりも小さい見つけ、その後、場所に滞在する、それが変更されていません。位置または8,2,5,9,7。

右フレームポインタが移動し、次いで、比較します。

[8,5,2,9,7]:第二及び第三の数のサイズ数を比較すると、2〜5が小であることが見出された、切り替え位置は、スイッチングアレイに更新されます。

右にさらにフレームポインタを移動し、比較を継続します。

[8,5,9,2,7]:9に第4番目の数字、2の数と大きさの比較が小さいことが判明したスイッチング位置は、スイッチングアレイに更新されます

同様に、ポインタが移動右へ、その後は、比較を継続します。

数4及び数5の大きさを比較し、7が2未満であることが見出された、交換の位置は、交換が更新される配列:[8,5,9,7,2]

次のステップは、右にカーソルを移動し、2で既に右端の桁をソートされ、最後にあったとラウンドバブルの終わりを発見しました。

コントラスト一定の交換によってこのラウンド、アレイ内の最小数が右端に移動します。

 

第二ラウンドのバブル:

 

 

 

 


番号2の列の右側には、既にトップ番号5を取るために最終ラウンドをバブリングし、バブリングの現在のラウンドの終了を順序付けられたシーケンスに起因するので、それはもはやアレイは今となって変化した、比較に関与して、ソートされていません[ 8,9,7,5,2]。

 

 

第三ラウンドバブル:

図8は、今や第三ラウンドバブルが終了しているので、同じ位置ことを、7よりも大きいので、第三ラウンドの最終的な結果は、[9,8,7,5,2]をバブリングさ

 

 

第4ラウンドバブル:

 

 そして、8〜9、順序付けられたシーケンスに8を特定し、同じ位置、そして唯一の最後の数字9は、ソートの終わり以来、最後に置か。

 

参考:https://mp.weixin.qq.com/s/D0-lOLFkfppTnvN9yK_lBg

おすすめ

転載: www.cnblogs.com/-wenli/p/12113523.html