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

ブログ    

推薦する

IDC: 2024年までにIoTシステムの約20%が人工知能をサポートすると予想

1月20日、IDCが最近発表した「IDC FutureScape:世界の人工知能(AI)と自動化市場...

行動分析:誤解された人工知能がもたらすセキュリティリスク

誇大宣伝を信じるなら、人工知能 (AI) と機械学習 (ML) はすでに現代の IT インフラストラ...

「緊急天使」がロボットを救出するために前進し、事態を収拾した

科学技術の進歩と社会の発展に伴い、ロボット産業は繁栄の時代を迎えています。ロボット工学は、コンピュー...

人工知能やブロックチェーンはビッグデータの範疇に入るのでしょうか?

まず、全体的な技術システム構造の観点から見ると、ビッグデータは人工知能やブロックチェーン技術と密接に...

2枚の写真から動画が作れます! Googleが提案したFLIMフレーム補間モデル

フレーム補間は、コンピューター ビジョンの分野における重要なタスクです。モデルは、指定された 2 つ...

2020 年に AI、分析、データ ガバナンスに影響を与える 5 つのトレンド

企業レベルの人工知能は、まさに臨界質量に達しました。 AI があらゆるビジネスの主要な構成要素となる...

...

自動応答は人工知能ではなく、自律応答は

セキュリティ オペレーション センター (SOC) のアナリストは推論と意思決定に優れていますが、2...

生成AIは高価すぎるため、マイクロソフトやグーグルのような大手テクノロジー企業でさえも導入できない

テクノロジー企業は、AI がビジネスメモを書いたり、コンピューターコードを作成したりできると宣伝して...

次世代人工知能の開発方向(第2部)

[[349523]]人工知能は半世紀以上前から存在していますが、人工知能の分野は過去 10 年間で...

AIの威力を改めて見せつける! Baidu Map 20分間のカスタマイズされたパーソナル音声パッケージ

百度地図は9月19日、「あなたのための『音声』、そして『AI』」記者会見で「音声カスタマイズ機能」を...

海外の専門家による人工知能の発展見通しに関する衝撃的な4つの予測

人工知能技術が成熟するにつれ、この技術のより広範な社会的、倫理的影響に十分な注意が払われていないので...

北京大学、バイトダンス等は増分学習を用いたスーパーピクセルセグメンテーションモデルLNSNetを提案した

オンライン学習によって引き起こされる壊滅的な忘却問題を解決するために、北京大学などの研究機関は、勾配...

人工知能温度測定が「スタンドガード」に登場!立ち止まる必要がなく、複数人が同時に温度を測定できます

この期間中、自宅に留まっている人々は、定期的にスーパーマーケットに行って商品を購入するという問題にも...

C#アルゴリズムに関する面接の質問の簡単な分析

C# アルゴリズムの面接の質問: プログラミング: 猫が叫び、ネズミが全員逃げ出し、飼い主は目を覚ま...