编辑合并排序以按 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
。合并阶段是唯一使用比较的地方。
您还可以将比较器传递给排序函数以允许自定义比较谓词。
还有另一种方法:您可以使用当前算法并反转结果。
我正在阅读朋友寄给我的课程作业样本,以便为明年的大学课程作业做好准备。我一直在尝试创建一个排序和搜索系统来处理各种数据。为此,我创建了一个合并排序系统,可以按升序对我的数据进行排序。但是,我不确定如何编辑此算法,以便它可以按降序排序。谁能解释一下这是如何做到的?
当前算法处理 字符串 值。
由于这是基于一项大学任务,因此需要我自己实际编写排序和搜索算法的代码,而不是使用通过 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
。合并阶段是唯一使用比较的地方。
您还可以将比较器传递给排序函数以允许自定义比较谓词。
还有另一种方法:您可以使用当前算法并反转结果。