【发布时间】:2017-09-22 23:45:24
【问题描述】:
我正在尝试编写一个数组排序和搜索程序,该程序将处理字符串数组中的 600 个项目。要排序的数据如下所示:
2017 | 25 |一月 | 9994750 | 27.640 | 36.800 |希腊多德卡尼斯群岛 | 1485307173 | 01:19:33 | 4.000 |
我一直在尝试实现合并排序来对这些数据进行排序。但是,我无法弄清楚如何将一个为 int 数组设计的合并排序程序转换为一个为对字符串数组进行排序的程序。谁能解释一下我是怎么做到的?
虽然这可以通过使用现有的内置函数来完成,但我一直在尝试这样做,为明年的大学课程做准备,因此我不得不从头开始编写 Merge 排序而不使用内置函数。
旁注:我必须注意,我知道在当前形式下,即使使用合并排序,程序也无法自然地对月份进行排序,但这是我已经有一个工作回合,一旦我可以让合并排序运行为有意的。
当前的归并排序程序:
static public void MainMerge(string[] numbers, int left, int mid, int right)
{
int[] temp = new int[25];
int i, eol, num, pos;
eol = (mid - 1);
pos = left;
num = (right - left + 1);
while ((left <= eol) && (mid <= right))
{
if (numbers[left].CompareTo(numbers[mid]))
temp[pos++] = numbers[left++];
else
temp[pos++] = numbers[mid++];
}
while (left <= eol)
temp[pos++] = numbers[left++];
while (mid <= right)
temp[pos++] = numbers[mid++];
for (i = 0; i < num; i++)
{
numbers[right] = temp[right];
right--;
}
}
static public void SortMerge(string[] numbers, int left, int right)
{
int mid;
if (right > left)
{
mid = (right + left) / 2;
SortMerge(numbers, left, mid);
SortMerge(numbers, (mid + 1), right);
MainMerge(numbers, left, (mid + 1), right);
}
}
【问题讨论】:
-
尝试重新利用代码通常比它的价值更多。这似乎是一项非常简单的任务,最好从头开始。
-
@coinbird 什么?这使用泛型非常简单。没有理由“从头开始”
-
您应该使用实现 IComparable 的泛型来实现排序。
public void MergeSort<T>(this T[] elements) where T : IComparable { } -
有什么理由不能使用
Array.Sort(array);而不是实现自己的排序? -
@GiggyLapisar 在编码方面的进步意味着你正在学习以正确的方式做事。在这里使用泛型是正确的方法。复制您的代码并将
string替换为int会起作用,但这是一个糟糕的解决方案。
标签: c# arrays sorting merge mergesort