ホームページ  >  記事  >  バックエンド開発  >  C# ヒルソート

C# ヒルソート

黄舟
黄舟オリジナル
2017-02-09 16:10:301959ブラウズ

C# ヒル ソート

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
namespace Sort  
{  
    class ShellSorter  
    {  
        public static int[] Sort(int[] a)  
        {  
            ShellSort(a);  
            return  a;  
        }  
        public static void ShellSort(int[] myArray)  
        {  
            int i, j, increment;  
            int temp;  
            for (increment = myArray.Length / 2; increment > 0; increment /= 2)  
            {  
                for (i = increment; i < myArray.Length; i++)  
                {  
                    temp = myArray[i];  
                    for (j = i; j >= increment; j -= increment)  
                    {  
                        if (temp < myArray[j - increment])  
                            myArray[j] = myArray[j - increment];  
                        else  
                            break;  
                    }  
                    myArray[j] = temp;  
                }  
            }  
        }  
    }  
}

ヒル ソートは、直接挿入ソート アルゴリズムを改良したもので、最初にソートされたシーケンス全体をいくつかのサブシーケンスに分割し、基本的にシーケンス全体の後でサブシーケンスに対して直接挿入ソートを実行することです。すべてに対して直接挿入ソートを実行します。これは、新しい順序付けされたシーケンスを形成するために使用されます。一般的な除算方法は、2 つの要素間の距離が d=n/2、n/4、n/8... などとなることです。
1. 基本的な考え方:
並べ替えるデータ要素全体をいくつかのグループに分割し、直接挿入方法を使用して同じグループ内のデータ要素を並べ替え、グループの数を徐々に減らし、完了するとすべてのデータ要素を並べ替えます。 1 つのグループ内 ソート後にソート処理は終了します。
2. スキル:
グループの構成は単純に「セグメントごとに分ける」のではなく、一定の増分 dk で区切られたレコードをグループ化し、増分 dk を段階的に短くしていきます (例: 5、 3、1 が順に取得され、dk=1 になるまで続きます。
3. 利点:
キーワード値が小さい要素を素早く進めることができ、順序が基本的に整っていれば、直接挿入ソートを使用できるため、時間効率が大幅に向上します。

例 1:

C# ヒルソート

C# ヒルソート

例 2:

C# ヒルソート

フローチャート

C# ヒルソート

挿入ソートアルゴリズムの場合、元のデータが順序付けされている場合、データは必要ありません移動、および挿入ソート アルゴリズムの効率は主にデータの移動に消費されます。したがって、データ自体を順序付けするか、基本的に順序付けすると、効率が向上することがわかります。

上記は C# と Hill ソートの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。


🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。