概要
バブルソートは、シンプルなソートアルゴリズムです。ソートするシーケンスを繰り返し訪れ、一度に2つの要素を比較し、それらが正しくない場合にそれらを交換します。シーケンスにアクセスする作業は、シーケンスがソートされるまで繰り返されます。このアルゴリズムの起源は、要素が小さいほど、Exchangeを介してシーケンスの開始までゆっくりと「フロート」するためです。
簡単に言えば、それは次のとおりです。
バブルソートは、アレイの後ろに沈むより大きな文字以上のものであり(以下のように理解できます)、より小さな文字が前に浮かんでいます(上)。
直感的な解釈図:
ステップ
隣接する要素を比較します。最初のものが2番目のものよりも大きい場合は、2つを交換します。
最初のペアから最後の最後のペアまで、隣接する要素のペアごとに同じ作業を行います。この時点で、最後の要素は最大の要素でなければなりません。
最後の要素を除くすべての要素について、上記の手順を繰り返します。
比較する必要がある数字のペアがなくなるまで、毎回より少ない要素のために上記の手順を繰り返し続けます。
例
生データ:
3 5 2 6 2
最初のラウンド
3と5、5は3より大きく、交換なし3 5 2 6 2は5と2を比較し続けます。5は2を超え、5は5と6を比較し続けます。
ラウンド2
比較3と2、3は2より大きく、交換位置2 3 5 2 6比較3および5は3より大き、5は3より大きく、交換はありません。
第3ラウンド
比較2と3、3は2より大きく、交換する必要はありません2 3 2 5 6比較3と2、3は2を超えており、交換位置2 2 3 5 6を比較する必要はありません
ラウンド4
交換なしで2と2を比較します2 2 3 5 6
4ラウンドが終了します
2 2 3 5 6
コード実装(Java)
パッケージcom.coder4j.main.arithmetic.sorting; public class bubble { / ** * bubble sort * * @param array * @return * / public static int [] sort(int [] array){int temp; //最初のレイヤーループには、長さの要素などの比較ラウンド数が表示され、比較されるラウンド数は(int i = 0; i <array.length -1; i ++){system.out.out.println( "thread" +(i + 1) + "wheel start"); //ループの2番目のレイヤーは、それぞれ隣接する2つの比較が1回減少し、ラウンド数が増えると回数が減少します。各ラウンドが最大のものを決定し、最大のものを(int j = 0; j <array.length -1 -i; j ++){if(array [j+1] <array [j]){temp = array [j]; array [j] = array [j + 1];配列[j + 1] = temp; } system.out.println( "th" +(i + 1) + "round、" th " +(j + 1) +" compare: "); for(int k:array){system.out.print(k +" ");} out.println();} system.out.out.println("); System.Out.println()テスト出力の結果:
2 3 5 6 6 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 4 3 3 5 6 4 4 4 4 4 4 5 6 4 4 4 4 4 4 4 5 6 4 4 4 4 4 4 4 4 4 4 5 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4最終結果2 2 3 5 6
テスト後、例の結果と一致します。