バブル ソートは、プログラミングにおける最も単純なソート アルゴリズムの 1 つです。ソート対象のシーケンスを繰り返し調べて、一度に 2 つの要素を比較し、順序が間違っている場合はそれらを交換します。交換する必要のある要素がなくなるまで、つまり配列がソートされたことになるまで、配列にアクセスする作業を繰り返します。
バブル ソートは水から現れる泡のようなものです。バブル ソートでは、配列を昇順または降順のどちらでソートしているかに応じて、最小値または最大値が選択され、配列の先頭または末尾に向かって泡が現れます。
1) 隣接する要素を比較します。最初の要素が 2 番目の要素より大きい場合、それらの 2 つを交換します。
2) 隣接する要素のすべてのペアに対して同じことを行います。最初のペアから始めて最後のペアで終わります。この時点で、最後の要素が最大の数値になります。
3) 最後の要素を除くすべての要素に対して上記の手順を繰り返します。
4) 比較する数値のペアがなくなるまで、要素を減らして上記の手順を繰り返します。
バブル ソートは、クイック ソート、マージ ソート、シェル ソートなどの他のソート アルゴリズムと比較してパフォーマンスが低くなります。これらのアルゴリズムの平均ケース複雑さは O(nlogn) ですが、バブル ソートの平均ケース複雑さは O(n^2) です。
最良の場合、バブル ソートは O(n) パフォーマンスでクイックソートよりも優れています。バブル ソートは、n=100 の場合でも、クイック ソートまたはマージ ソートより 3 倍遅くなりますが、実装と覚えやすさはより簡単です。
バブル ソートの複雑さとパフォーマンスは次のとおりです。
1) バブルソートの最悪の場合のパフォーマンスは O(n^2)
2) バブルソートの最良の場合のパフォーマンスは O(n) です
3) バブルソートの平均パフォーマンスは O(n^2) です
//バブル ソート publicstaticvoidbubbleSort(int[]arr){//外側のループは配列ループのターン数を制御するために使用されます for(inti=0;i<arr.length-1;i++){//内側のループループは、要素値の比較を完了し、大きい要素値を後方に交換するために使用されます for(intj=0;j<arr.length-1-i;j++){if(arr[j]>arr [j+1]){inttemp= arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}//出力結果 for(intn:nums){System .out.println(n);} }
例えば:
publicclassMain{publicstaticvoidmain(String[]args){inta[]={6,1,15,32,9};for(inti=1;i<a.length;i++){for(intj=0;j<a .length-1;j++){if(a[j]>a[j+1]){inttemp=a[j];a[j]=a[j+1];a[j+1]=temp ;}}}System.out.println(バブルソートの結果は次のとおりです:);for(inttemp:a){System.out.print(temp+);}}}
実行結果は次のとおりです。
バブルソートの結果は次のようになります: 1691532
自分で試してみることもできます。