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): 基数ソート

推薦する

AI研究者の邢波氏:機械学習には明確な理論的枠組みが欠けており、評価の目標と方法を再定義する必要がある

[[426278]] 2021年1月、コンピュータサイエンスと人工知能分野のトップ学者であるエリッ...

推奨アルゴリズムコレクション(パート2) - SVDとCB

[[331259]] 【51CTO.comオリジナル記事】 1. はじめに前回の記事でレコメンデー...

人工知能の今後の発展における3つの大きなトレンド、それぞれが驚きである

人工知能は、知能機械や機械知能とも呼ばれ、人間が作った機械が示す知能を指します。人工知能は、医療、テ...

人工知能を活用して顧客サービス体験を向上させる 5 つの方法

人々がデジタルの世界に移行するにつれて、組織と顧客の関係はここ数年で変化してきました。顧客の期待はか...

女性用メイクアップムスク!超楽しいモデルStyleCLIPがオープンソースになりました。急いで自分の顔を変えてみましょう

[[421561]]マスク氏は科学研究に本当に多大な貢献をしてきました!最近、イスラエルの研究者が新...

...

今後の企業イノベーションを牽引する10の優れたテクノロジー

エンタープライズ テクノロジーの将来は、業界を変えるほどの大きな革新をもたらすでしょう。 5G から...

...

PageRankアルゴリズムとPR値の転送の詳細な分析

PageRank アルゴリズムは、Google のランキング アルゴリズム (ランキング式) の一部...

機械学習の公平性研究は正しい方向に進んでいるのでしょうか?

機械学習における公平性に関する研究は本当に正しい方向に進んでいるのでしょうか?人工知能の発展に伴い、...

...

2024 年の CIO の 14 の優先事項とトレンド

GenAI は 2024 年の最大のテクノロジー トレンドとなり、新しいツールのレビュー、インフラス...

...