编辑合并排序以按 C# 降序排序

Editing a Merge Sort to sort in Descending Order C#

我正在阅读朋友寄给我的课程作业样本,以便为明年的大学课程作业做好准备。我一直在尝试创建一个排序和搜索系统来处理各种数据。为此,我创建了一个合并排序系统,可以按升序对我的数据进行排序。但是,我不确定如何编辑此算法,以便它可以按降序排序。谁能解释一下这是如何做到的?

当前算法处理 字符串 值。

由于这是基于一项大学任务,因此需要我自己实际编写排序和搜索算法的代码,而不是使用通过 Visual Studio 提供的内置函数。

static public void MainMerge<T>(T[] values, int left, int mid, int right) where T : IComparable<T>
    {
        int c = values.Length;
        T[] temp = new T[c];
        int i, eol, num, pos;

        eol = (mid - 1);
        pos = left;
        num = (right - left + 1);

        while ((left <= eol) && (mid <= right))
        {
            if (values[left].CompareTo(values[mid]) < 0)
                temp[pos++] = values[left++];
            else
                temp[pos++] = values[mid++];
        }

        while (left <= eol)
            temp[pos++] = values[left++];

        while (mid <= right)
            temp[pos++] = values[mid++];

        for (i = 0; i < num; i++)
        {
            values[right] = temp[right];
            right--;
        }
    }

    static public void SortMerge<T>(T[] values, int left, int right) where T : IComparable<T>
    {
        int mid;

        if (right > left)
        {
            mid = (right + left) / 2;
            SortMerge(values, left, mid);
            SortMerge(values, (mid + 1), right);

            MainMerge(values, left, (mid + 1), right);
        }
    }

您只需将此:values[left].CompareTo(values[mid]) < 0 更改为:values[left].CompareTo(values[mid]) >= 0。合并阶段是唯一使用比较的地方。

您还可以将比较器传递给排序函数以允许自定义比较谓词。

还有另一种方法:您可以使用当前算法并反转结果。