我正在完成一个课程作业的样本,我已经被朋友送去为我明年的大学课程做好准备。我一直在尝试创建一个排序和搜索系统来处理各种数据。为此,我创建了一个合并排序系统,可以按升序对数据进行排序。但是,我不确定如何编辑此算法,以便它可以按降序排序。任何人都可以解释一下如何做到这一点吗?
当前算法处理 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);
}
}
答案 0 :(得分:3)
您只需要将此更改为values[left].CompareTo(values[mid]) < 0
:values[left].CompareTo(values[mid]) >= 0
。合并阶段是唯一使用比较的地方。
您还可以将比较器传递给sort函数以允许自定义比较谓词。
还有一种方法:您可以使用当前算法并反转结果。