课堂作业 - C# 中的 shellsort?

发布于 2024-10-07 12:40:29 字数 48 浏览 2 评论 0原文

我需要一种简单的方法在 C# 中使用 ShellSort 对数组进行排序,请帮助我

i need an easy way to sort an array using ShellSort in c#, please help me

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

还在原地等你 2024-10-14 12:40:29

使用希尔排序。

Use shell sort.

不打扰别人 2024-10-14 12:40:29

没有人会为你编写代码。你是来学习的。我将采取以下步骤:

  1. 转到维基百科的希尔排序页面

  2. 查找该算法的伪代码。阅读它,直到理解它的作用。

  3. 将伪代码移植到 C#。

  4. 如果您在实施过程中遇到问题,请随时回来提出具体问题。

Nobody is going to write your code for you. You're there to learn. I'd take the following steps:

  1. Go to Wikipedia's Shell Sort Page

  2. Find the psuedocode for the algorithm. Read it until you understand what it does.

  3. Port the psuedocode to C#.

  4. If you have a problem during implementation feel free to come back and ask specific questions.

陪你搞怪i 2024-10-14 12:40:29
    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;
    }
    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;
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文