问题描述
我一直在尝试构建合并排序算法,该算法对数字列表进行排序,但似乎无法使其正常工作。此刻的功能如下:
private void Merge_sort(List<int> list,int left,int right)
{
if (left < right)
{
int center = (left + right) / 2;
Merge_sort(list,left,center);
Merge_sort(list,center + 1,right);
Merge(list,center,right);
}
}
private void Merge(List<int> list,int center,int right)
{
int num1 = center - left + 1;
int num2 = right - center;
List<int> left_list = new List<int>();
List<int> right_list = new List<int>();
for (int ii = left; ii <= center; ii++)
{
left_list.Add(ii);
}
for (int jj = center + 1; jj < right; jj++)
{
right_list.Add(jj);
}
left_list[num1 + 1] = int.MaxValue;
right_list[num2 + 1] = int.MaxValue;
int i = 1;
int j = 1;
for (int k = left; k < right; k++)
{
if (left_list[i] <= right_list[j])
{
list[k] = left_list[i];
i= i+1;
}
else
{
list[k] = right_list[j];
j = j+1;
}
}
}
public override void Sort(List<int> list)
{
//find the center
int center = list.Count / 2;
int right = center;
int left = center;
Merge_sort(list,right);
}
有人可以看到我在做什么错吗?该程序运行,只是不对列表进行排序。
解决方法
if(left < right)
都是使用center
来初始化的,因此,它们总是 为false
,甚至从未开始排序。
如果逐步执行,您可能会看到。让自己熟悉调试工具:)
要解决此问题,请尝试...
public override void Sort(List<int> list)
{
// TODO Check Count > 1,maybe even > 2 for 2 elements you simply need an if/else
int right = list.Count-1;
int left = 0;
Merge_sort(list,left,right);
}