バブルアルゴリズム
バブルソート順次隣接する二つの数値の大小を比較し、発泡配列の一端から他端まで開始します。
セット配列の長さはNです。
1。以前のデータは、データのバックより大きいまたは小さい場合、隣接する二つのデータの各ラウンドの前と後の比較は、2件のデータが交換されます。
2。N-1位で最初のデータへのアレイの最大値または最小一旦横断N-1アレイデータにデータ0のこうして最初のラウンド。
インデックスN-1のデータ(最後)の最初のラウンドに3.比較は、各比較の後である-1。
する#include <stdio.hの> int型のmain(){ int型のリスト[ 10 ] = { 5、23、86、21、43、67、45、34、58、23 }。 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 ] = { 5、23、86、21、43、67、45、34、58、23 }。 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は、ソートの終わり以来、最後に置か。