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

ブログ    

推薦する

Moka、業界初となるAIネイティブHR SaaS製品「Moka Eva」をリリース、AGI時代を見据えた準備万端

2023年6月28日、Mokaは北京で2023年夏の新製品発表会を開催した。 Moka CEOのLi...

多くの場所で違法な顔認識を禁止する法律が制定されています。ビッグデータは個人にどのような悪影響を及ぼすでしょうか?

先月、個人情報保護のため、「ヘルメットをかぶって家を眺める」男性の短い動画がネット上で拡散され、ネッ...

...

アルゴリズム取引におけるビッグデータ分析の活用

ウォーレン・バフェットの資産が 5000G あることをご存知ですか? 反対派や懐疑派の意見に反して、...

自動運転車は交通事故の3分の1しか解決できない、と研究が示す

自動運転車の主な目標、少なくともこの技術の支持者が推進している目標は、運転手や乗客の利便性を高めるこ...

NVIDIA が Tensor RT-LLM を発表、RTX 搭載 PC プラットフォームで大規模言語モデルを 4 倍高速化

10月18日、NVIDIAはハードウェア分野における生成型人工知能の王者となった。同社のGPUは、M...

Wu Sinan の機械学習への旅: Numpy で多次元配列を作成する

[[188605]] Numpy は Python 科学計算のコアライブラリの 1 つであり、主に多...

...

スマートホームが不動産市場の動向に与える影響

今日、多くの人がスマートホームが提供するものを活用したいと考えています。スマートホームは、快適で便利...

機械学習における欠損値に対処する9つの方法

データサイエンスはデータに関するものです。これは、あらゆるデータ サイエンスや機械学習プロジェクトの...

医療AIの今後の展開:注目すべき3つのトレンド

COVID-19パンデミックが猛威を振るい、人々のメンタルヘルスが危機に瀕し、医療費が上昇し、人口...

WSLはAIトレーニングタスクとLinux GUIアプリケーションの実行をサポートします

WSL は Windows 上で GPU を使用してアプリケーションを実行することをサポートするよう...

このAI職種の平均学歴は中学卒程度であり、最も絶望的な職業として認識されている

[[437446]] 2020年2月、「人工知能トレーナー」は正式に新しい職業となり、国家職業分類カ...

李開復:中国の大型モデル競争は非常に激しく、最終的には大きな勝者が数人出るだろう

12月28日、ベンチャーキャピタリストで元Google China社長の李開復氏の予測によれば、中国...

未来はここにある: データが大規模 AI モデルにおける競争をどう促進するか

人工知能の急速な発展に伴い、高品質なデータの重要性がますます明らかになっています。大規模言語モデルを...