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

时间:2017-05-01 16:57:39

标签: c# algorithm sorting mergesort

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

当前算法处理 string 值。

由于这是基于大学任务,它需要自己实际编码排序和搜索算法,而不是使用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);
        }
    }

1 个答案:

答案 0 :(得分:3)

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

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

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