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

ブログ    
ブログ    
ブログ    

推薦する

JavaScript 面接でよくあるアルゴリズムの質問の詳細な説明

[[185725]] JavaScript での変数の昇格を説明するいわゆるプロモーションは、その名...

...

サム・アルトマンは、AGI が 2030 年までに登場し、GPT-10 の知能が全人類の知能の合計を超えると予測しています。

「人類は2030年までにAGIを開発するかもしれない。」サム・アルトマンは最近のポッドキャストのイ...

人工知能がデータセンターを変革

[[253094]]がんの早期発見から国境を越えた人間の言語理解、リアルタイムの高解像度ビデオでの顔...

AIはオミクロン変異体の構造を1時間で予測、誤差は原子直径の半分のみ

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

日本の量子コンピューティング戦略:2030年までに量子技術ユーザー1000万人を目指す

量子時代が到来し、世界は安全・安心な暮らしとより良い社会の実現への期待が高まっています。 最近、日本...

生涯にわたる機械学習: 持続可能な学習のパラダイム

[[207884]]序文:最近、アンサンブル学習における持続可能性に関する研究に関する非常に興味深い...

想像を超える: 5つの興味深い実用的なChatGPTのヒントとコツ

ChatGPT は情報を提供したり質問に答えたりするだけでなく、インテリジェントなアシスタントとして...

「人間の顔」から「犬の顔」まで、AIはペット経済にも参入するのでしょうか?

[[334871]]原題:「人間の顔認識」から「犬の顔認識」まで、人工知能はペット経済にも参入する...

テレンス・タオ:初心者はAIツールを使って専門家レベルのタスクを実行すべきではないし、GPTは専門家にとってあまり役に立たない

著名な数学者テレンス・タオ氏はここ数か月、ChatGPTなどの大規模モデルAIツールを使用して数学の...

AIネットワークはこれまで考えられていたよりも攻撃に対して脆弱である

人工知能 (AI) ツールは、自動運転車から医療画像解釈まで、さまざまなアプリケーションで使用される...

AIをやりたいなら高校でデータサイエンスを勉強するな:ウルトラマンとマスクがついに合意

AIの発展には基礎教育を強化しなければ手遅れになります。大規模モデル技術が急速に発展し、企業間の競争...

ロボットは「痛みを恐れ」始めており、人間の介入なしに「自分自身を癒す」こともできる。

[[348121]]私の印象では、ロボットは火や剣を恐れていないようです。彼らには痛覚はなく、単な...

恥ずかしい! ChatGPT を使用して論文を書いたのですが、生成ボタンを削除するのを忘れました。出版社から「論文を撤回します」と言われました。

それは恥ずかしいですね。物理学の論文でも ChatGPT ボタンがコピーされていました。結果は2か月...