Java クラシックアルゴリズム: カクテルソート

Java クラシックアルゴリズム: カクテルソート

ソートアルゴリズムの中では、バブルソートが古典的です。カクテル ソートは、シェーカー ソートとも呼ばれ、改良されたバブル ソートです。以下はJavaで実装されています。

質問:

長さ n の配列があります。配列内の要素を小さいものから大きいものの順に並べ替えます。

アイデア:

カクテルソーティングのプロセスは次のとおりです。

(1)まず、配列を左から右へ(昇順で)バブルソートし、最大の要素を右端に移動します。

(2)次に、配列を右から左へ(降順)バブルソートし、最小の要素を左端に移動します。

このように、バブルの方向を順番に変えて、ソートされていない要素の範囲を継続的に狭めていきます。

例: 45、19、77、81、13、28、18、19、77 を並べ替える

左から右へ: 19、45、77、13、28、18、19、77、81

右から左へ: 13、19、45、77、18、28、19、77、81

左から右へ: 13、19、45、18、28、18、77、77、81

右から左へ: 13、18、19、45、18、28、77、77、81

左から右へ: 13、18、19、18、28、45、77、77、81

右から左へ: 13、18、18、19、28、45、77、77、81

この時点で、これ以上の交換は行われず、ソートは完了します。

コアコード:

  1. 静的  voidソート( int [] 配列) {
  2. int top = 配列の長さ - 1 ;
  3. int下 = 0 ;
  4. ブールフラグ = true ;
  5. 整数i, j;
  6. while (フラグ) {
  7. フラグ = false ;
  8. //小さいものから大きいものへ、昇順 
  9. (i = 下; i < 上; i++) {
  10. (配列>配列[i + 1 ])の場合{
  11. swap(配列、i、i + 1 );
  12. フラグ = true ;
  13. }
  14. }
  15. トップ - ;
  16. //大きいものから小さいものへ、降順 
  17. (j = 上; j > 下; j--) {
  18. (配列[j] < 配列[j - 1 ])の場合{
  19. swap(配列、j、j - 1 );
  20. フラグ = true ;
  21. }
  22. }
  23. 下++;
  24. }
  25. }
  26. 完全なコード:
  27. パッケージcom.icescut.classic.algorithm;
  28. 公共 クラスCocktailSort {
  29. 公共 静的  void main(String[] args) {
  30. int [] array = { 10 , - 3 , 5 , 34 , - 34 , 5 , 0 , 9 }; // テストデータ 
  31. ソート(配列);
  32. for ( int el : 配列) {
  33. System.out.print(el + " " );
  34. }
  35. }
  36. 静的  voidソート( int [] 配列) {
  37. int top = 配列の長さ - 1 ;
  38. int下 = 0 ;
  39. ブールフラグ = true ;
  40. 整数i, j;
  41. while (フラグ) {
  42. フラグ = false ;
  43. //小さいものから大きいものへ、昇順 
  44. (i = 下; i < 上; i++) {
  45. (配列>配列[i + 1 ])の場合{
  46. swap(配列、i、i + 1 );
  47. フラグ = true ;
  48. }
  49. }
  50. トップ - ;
  51. //大きいものから小さいものへ、降順 
  52. (j = 上; j > 下; j--) {
  53. (配列[j] < 配列[j - 1 ])の場合{
  54. swap(配列、j、j - 1 );
  55. フラグ = true ;
  56. }
  57. }
  58. 下++;
  59. }
  60. }
  61. プライベート 静的  void swap( int [] 配列, int i, int j) {
  62. int tmp = 配列;
  63. 配列 = 配列[j];
  64. 配列[j] = tmp;
  65. }
  66. }

【編集者のおすすめ】

  1. C++ ソートに関する 4 つの古典的な講義: 挿入ソート
  2. C++ ソートに関する 4 つの古典的な講義: シェル ソート
  3. C++ ソートに関する 4 つの古典的な講義: パート 3: 交換ソート
  4. C++ ソートの 4 つの選択ソートによる古典的な 4 つの講義

<<:  Android マーケットのランキングアルゴリズムとルールの分析

>>:  Java ソートアルゴリズムの概要 (VIII): 基数ソート

ブログ    
ブログ    

推薦する

...

アルゴリズムの視覚化: 理解しにくいコードをゴッホの星空に描く

厳選記事 | 呉嘉楽翻訳 | 黄年校正 | フェン・チェン、ヤオ・ジアリンマイク・ボストック出典 |...

...

...

Meituと中国科学技術大学が共同で顔面修復法DiffBFRを提案

ブラインド フェイス リストレーション (BFR) は、低品質の顔画像から高品質の顔画像を復元するこ...

AI モデルの「アウトソーシング」をやめましょう!新しい研究によると、機械学習モデルのセキュリティを弱める「バックドア」の一部は検出できないことが判明した。

悪意のある「バックドア」が埋め込まれたモデルが、何百万、何十億ものパラメータを持つモデルの中に、何者...

なぜロボット起業のチャンスはBサイドにあると言われるのでしょうか?

技術の変化のスピードは常に保守派の想像を超えています。 [[348702]]多くの人々の直感では、過...

GenAI が近づくにつれて、データ ガバナンスはどのように進化するべきでしょうか?

著者 | アイザック・サコリック編集者 | ヤン・ジェン制作:51CTO テクノロジースタック(We...

AirPodsは「あなたの脳を読む」ことができるのか?あるいは汗中の乳酸濃度も監視できるタイプ|ネイチャー

AirPods は脳の信号を監視できますか? !それともアルツハイマー病やパーキンソン病を予測できる...

...

...

「順序付きファネル」アルゴリズム問題は、iResearch A10サミットで新たなブレークスルーを達成すると期待されています。

新小売、新金融、新エンターテインメントなどの新しい業態の台頭により、ビッグデータの驚異的な力がインタ...

米メディア:人工知能(AI)は、人間の推論の欠点を伴わずにコンピューティングの利点を実現する

[[334808]]ミラロのコメント – 今日の軍事コンピューティングに関連するものはすべて人工知能...

...

DeLu Deep Vision: 3Dマシンビジョンに焦点を当て、セキュリティの「スマートアイ」を照らす

[[283588]] [51CTO.comより]先日、「勢いの刷新と知能の統合」をテーマにした世界人...