Javaソートアルゴリズムの概要(IV):シェルソート

Javaソートアルゴリズムの概要(IV):シェルソート

シェルソート(縮小増分法)は挿入型ソートに属し、順序付けられていないシーケンス全体をいくつかの小さなサブシーケンスに分割し、それらを個別に挿入してソートします。シェルソートは安定しておらず、追加スペースは O(1)、時間計算量は O(N*(logN)^2) です。最悪の場合の実行効率は、平均的な場合の実行効率とそれほど変わりません。

基本的な考え方:

まず、最初の増分として n より小さい整数 d1 を取り、ファイル内のすべてのレコードを d1 グループに分割します。距離が d1 の倍数であるすべてのレコードは同じグループに配置されます。まず、各グループ内で直接挿入ソートを実行します。次に、2 番目の増分 d2<d1 を取り、増分 dt=1 (dt<dt-l<…<d2<d1) になるまで、つまりすべてのレコードが同じグループに配置されて直接挿入ソートが実行されるまで、上記のグループ化とソートを繰り返します。

コード実装:

  1. パブリッククラステスト{
  2. public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // プリセットデータ配列
  3. パブリック静的void main(String args[]) {
  4. int i; // ループカウント変数
  5. int Index = a .length; // データインデックス変数
  6. System.out.print("ソート前: ");
  7. ( i = 0 ; i &lt;の場合 インデックス- 1; i++)
  8. System.out.printf("%3s ", a);
  9. System.out.println("");
  10. ShellSort(Index - 1); // ソートを選択
  11. // ソートされた結果
  12. System.out.print("ソート後: ");
  13. ( i = 0 ; i &lt;の場合 インデックス- 1; i++)
  14. System.out.printf("%3s ", a);
  15. System.out.println("");
  16. }
  17. パブリック静的void ShellSort(int Index) {
  18. int i, j, k; // ループカウント変数
  19. int Temp; // 一時変数
  20. boolean Change; // データが変更されたかどうか
  21. int DataLength; // コレクションを分割する間隔の長さ
  22. int ポインタ; // 処理する場所
  23. DataLength = (int) Index / 2; // 初期収集間隔の長さ
  24. while (DataLength != 0) // シーケンスはまだ分割できます
  25. {
  26. // 各コレクションを処理する
  27. for ( j = DataLength ; j &lt;  インデックス; j++) {
  28. 変更= false ;
  29. Temp = a [j]; // 後で使用するためにData[j]の値を一時的に保存します
  30. Pointer = j - DataLength; // 処理する位置を計算する
  31. // コレクション内の値を比較して交換する
  32. (Temp &lt;の間、   a [ポインタ] && ポインタ> = 0 && ポインタ< = インデックス) {
  33. a[ポインタ + データ長] = a[ポインタ];
  34. // 次に処理する位置を計算する
  35. ポインタポインタ= ポインタ - データ長;
  36. 変更= true ;
  37. if (ポインタ&lt;   0 || ポインタ>インデックス)
  38. 壊す;
  39. }
  40. // 最後の値と交換
  41. a[ポインタ + データ長] = Temp;
  42. if (変更) {
  43. // 現在のソート結果を出力します
  44. System.out.print("ソート: ");
  45. ( k = 0 ; k &lt; )の場合 インデックス; k++)
  46. System.out.printf("%3s ", a[k]);
  47. System.out.println("");
  48. }
  49. }
  50. DataLength DataLength = DataLength / 2; // 次のセグメンテーションの間隔の長さを計算します
  51. }
  52. }
  53. }

シェルソートでは、最悪のシナリオはほとんどありません。順方向、逆方向、ランダムな順序のいずれであっても、かかる時間はそれほど長くなく、追加のストレージは O(1) であり、これは非常に優れています。クイックソートとヒープソートを理解する前に、それは確かに良い選択です。これがお役に立てば幸いです。

【編集者のおすすめ】

  1. Java オブジェクト インスタンスはいつ作成されますか?
  2. C++ ソートに関する 4 つの古典的な講義: シェル ソート
  3. Java Web アプリケーション開発におけるいくつかの概念の解釈

<<:  Java ソートアルゴリズムの概要 (V): マージソート

>>:  Java ソートアルゴリズムの概要 (パート 3): バブル ソート

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

OpenAI の新しいモデルは大きな飛躍を示しています。AGI のプロトタイプは人類を脅かす可能性があり、アルトマンを解雇する導火線にもなりました。

サム・アルマンが解雇され、最新の内幕が明らかに!ロイター通信によると、彼が解雇されるわずか4日前に、...

CoBEVFlow: 車両と道路の協調認識におけるタイミングの非同期の問題を解決

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

Java データ構造とアルゴリズム分析 (VIII) - スプレー ツリー

ストレッチツリーの紹介スプレー ツリーは特殊な二分探索ツリーです。特別なのは、バイナリ検索ツリーであ...

李嘉誠は率直に言った。「人工知能の時代には、これらのいくつかの業界だけが大きな成功を達成するのに役立ちます。」

李嘉誠氏はこう語った。「人工知能の時代には、世界がどう変化しても、経済サイクルがどう変動しても、常に...

AIとGo言語をシームレスに統合する方法を学ぶ

今日のアプリケーション開発分野では、OpenAI API などの生成 AI 技術の活発な開発により、...

キングソフトAIラボが最初の実装計画を発表、AIの最も難しい部分を選択した

[[255298]] 「2014年に私は、30年前に設立されたKingsoft WPSは雷軍によって...

ML モデルに魂を吹き込む: MVP に基づく超シンプルなデプロイメント ソリューション

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

これら 19 の主流 AI テクノロジーについて、どの企業がサービスを提供しているかご存知ですか?

[51CTO.com クイック翻訳] 自然言語生成や音声認識などの分野を中心に、現在主流となってい...

AIに「子犬」を認識させますか? Facebookは変化を感知できるAIを構築

[[389144]]今まで見たことのない犬種や色であっても、私たちは一目見てその犬を認識することがで...

GPUが急成長を遂げるGenAIの時代において、AMDはNvidiaのCUDAソフトウェアの堀を超えつつある

今日、生成 AI (GenAI) について話すとき、GPU とそれに伴うパフォーマンスおよびアクセシ...

[ホワイトベアおもしろ事実4] パーフェクトワールド:ペットの犬にはロボットがいて、独身の犬にはバーチャルガールフレンドがいる

[[185884]]飼い犬用のロボットを設計した人や、独身者向けのバーチャルガールフレンドを作った人...

最新のAIはプログラマーを失業させるでしょうか?

現在、AI は追加のトレーニングを必要とせずに、任意の言語でコーディングできます。 [[334827...

GPT-4 を搭載した初のヒューマノイドロボット!プログラミングは不要 + ゼロショット学習、口頭フィードバックに基づいて動作を調整可能

事前のプログラミングやトレーニングなしで GPT-4 を使用してヒューマノイド ロボットを制御すると...

...