1

C# で ShellSort を使用して配列を並べ替える簡単な方法が必要です。助けてください

4

3 に答える 3

10

シェルソートを使用します。

于 2010-12-14T14:52:27.477 に答える
9

誰もあなたのためにあなたのコードを書くつもりはありません。あなたは学ぶためにそこにいます。私は次の手順を実行します。

  1. ウィキペディアのシェルソートページに移動します

  2. アルゴリズムの擬似コードを見つけます。それが何をするのか理解するまでそれを読んでください。

  3. 擬似コードをC#に移植します。

  4. 実装中に問題が発生した場合は、遠慮なく戻って具体的な質問をしてください。

于 2010-12-14T14:54:51.593 に答える
0
    public static int[] shellSort(int[] ar)
    {
        //this gaps array works but is not unique
        int[] gaps = new int[] { 1, 4, 10, 23, 57, 132, 301, 701 };
        gaps = gaps.Reverse().ToArray();

        Func<int, int, bool> potentialSwitch = (ind1, ind2) =>
        {
            if (ar[ind2] < ar[ind1])
            {
                int temp = ar[ind2];
                ar[ind2] = ar[ind1];
                ar[ind1] = temp;
                return true;
            }
            return false;
        };

        foreach (int gap in gaps)
        {
            if (gap >= ar.Length)
                continue;

            for (int i = 0; i + gap < ar.Length; i++)
            {
                int j = i;
                while (potentialSwitch(j, j + gap))
                {
                    j -= gap;
                    if (j < 0)
                        break;
                }
            }
        }

        return ar;
    }
于 2016-07-01T10:43:21.920 に答える