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 テクノロジーは、単純なフレーズを驚くほどリアルな画像に変換し、世界中の人々の想像力をかき...

2019 AIIA開発者会議記者会見が北京で開催

10月10日、2019 AIIA人工知能開発者会議の記者会見が北京で開催されました。 2019年AI...

人間の脳神経を模倣してAIを開発!ケンブリッジ大学の最新研究がネイチャー誌に掲載:人工脳がAIの新たな方向性となる

地球上で最も複雑な知能の担い手である人間の脳の最大の特徴の 1 つは、高いエネルギー効率で知能を生み...

...

GPTストア立ち上げの裏側:民間開発者のグループが儲かり、スタートアップのグループが消滅

ノア著制作:51CTO テクノロジースタック(WeChat ID:blog)昨年末に一連の「宮廷闘争...

自動運転車を壁に衝突させ、他人の顔を使って代金を支払う:最新のAIの抜け穴が私たちの目を覚まさせる

かつて専門家が懸念していたAIアルゴリズムの抜け穴は起こり得るし、予想もしなかった抜け穴さえも起こり...

...

Google MobileNetを超えろ! Huawei がエッジツーエッジ ニューラル ネットワーク アーキテクチャ GhostNet を提案 | オープンソース

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

この本は人気があり、この本を学んだ男性は給料が30万以上上がった

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

...

医療機器製造における3つの大きなトレンド

医療製造にロボット工学と自動化を導入したダヴィンチ ロボット手術システムが発売されてから 20 年が...

人工知能は人間の精神的健康を評価できる

学際的な共同プロジェクトによる研究によると、人工知能は専門家の評価を必要とせずに、アンケートや脳スキ...

人事戦略と人材開発の形成における AI の役割

AI の力を活用することで、人事チームは複雑な課題に対処し、効率性を向上させ、前向きな職場環境を育む...

...