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は顔の特徴、口を開ける、見つめる、眉を上げるなどの動作を完璧に模倣できるため、動画詐欺を防ぐことは不可能である。

防ぐのは不可能だ。そもそも防ぐことは不可能だ。AIの模倣能力はここまで発達しているのか?ある瞬間に顔...

一目でわかるアルゴリズム「配列と連結リスト」

データ構造はソフトウェア開発の最も基本的な部分であり、プログラミングの内部的な強さを反映しています。...

AI特許出願件数は世界第1位で、世界総出願件数の約4分の3を占める。

先日蘇州で開催された中国人工知能産業2020年年次大会で発表された「2020年中国人工知能発展報告書...

ニューラルコンピュータAIモデルのブレークスルー!トレーニング時間は1秒あたり120万フレームに達し、新記録を樹立

[[326502]]今週、IBMは、同社のニューラル・コンピュータ・システムが1秒あたり120万フレ...

ボストンダイナミクスのロボット犬と一緒に散歩に行きました! 「すごい」って言い続ける…(車横転シーン添付)

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

...

ハーバード大学の研究によると、GPT-4は一部の企業従業員のパフォーマンスを40%向上させることができるという。

9月26日のニュースによると、OpenAIのChatGPTが発売されて以来、企業の経営者や従業員は...

ハッシュアルゴリズムに基づくMySQLテーブルパーティション

以下に紹介する Mysql テーブルのパーティショニング プロセスは、ハッシュ アルゴリズムに基づい...

Ma Yiチームの新作!大規模なマルチモーダルモデルを微調整すると、「壊滅的な忘却」につながり、パフォーマンスが大幅に低下する可能性があります。

モデルの壊滅的な忘却は現在重要なホットトピックとなっており、GPT-4 でもそれを回避することはでき...

...

...

...

...

人工知能を始めるには

業界の専門家によると、人工知能を使用していない多くの企業がこの新興技術を急いで導入し始めている一方で...