合并排序功能C#不排序

问题描述

我一直在尝试构建合并排序算法,该算法对数字列表进行排序,但似乎无法使其正常工作。此刻的功能如下:

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);
}