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): バブル ソート

ブログ    

推薦する

アンドリュー・ン氏の新たな動き:「データ中心のAI」の拠点となる新たなMLリソースサイトを設立

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

...

キャラクター AI は私たちのやり取りの方法をどのように変えるのでしょうか?

Persona AI は、人々がチャットボットと対話する方法に革命をもたらします。ニューラル言語モ...

レア! Apple のオープンソース写真編集ツール MGIE が iPhone に登場?

写真を撮り、テキストコマンドを入力すると、携帯電話が自動的に写真の編集を開始しますか?この魔法のよう...

BaiduのHou Zhenyu氏:ビッグモデルがクラウドコンピューティングを再形成し、AIネイティブクラウドがクラウドコンピューティングの様相を変える

12月20日、2023年百度クラウドインテリジェンスカンファレンスおよびインテリジェントコンピューテ...

機械学習を使うべきタイミング

著者 | 杜家平なぜこのトピックを議論するのですか?このトピックを議論する本質的な理由は、顧客にデー...

私の国の最新のトップ10のブラックテクノロジーが発表され、あなたの想像力を覆します

人工知能の急速な発展により、「ブラックテクノロジー」という言葉が人々の心に深く根付いている。目もくら...

2021年以降の人工知能トレンドに関する5つの予測

[[377548]]アンドリュー・ン教授(スタンフォード大学コンピュータサイエンスおよび電気工学准教...

...

...

人工知能は衛星地図の鮮明度を向上させ、世界の再生可能エネルギープロジェクトや森林被覆率を示す

マイクロソフトの共同創業者ポール・アレン氏が設立したアレンAI研究所は最近、Satlasと呼ばれる新...

ガートナー:世界のAIチップの収益は2023年に530億ドル、2027年には1194億ドルに達する

8月24日、市場調査会社ガートナーの最新予測によると、 AI向けハードウェアの世界販売収益は2023...

マイクロソフト、生成型 AI に関する初のキャリア認定を開始

Microsoft は、人工知能に対する最近の関心と熱意に応えるために、新しいタイプのトレーニングと...

「人工知能」の発展を合理的に扱う

現在の人工知能の発展は、主にディープラーニングに代表される機械学習技術の恩恵を受けています。ディープ...