使用三个中值排序算法?

时间:2014-05-15 11:18:55

标签: c# algorithm sorting quicksort

我正在使用以下算法,我在互联网上找到并修改了一下,找到了三个中位数:

private static List<int> quicksort(List<int> arr)
{
    List<int> loe = new List<int>(), gt = new List<int>();

    if (arr.Count < 2)
        return arr;

    int middle = arr.Count / 2;
    int left = arr.First();
    int right = arr.Last();
    int MoT = 0;

    if (middle < left && middle < right) 
        MoT = middle;
    if (left < middle && left < right) 
        MoT = left;
    if (right < left && right < middle) 
        MoT = right;

    int pivot_val = arr[MoT]; //assign median pivot
    arr.RemoveAt(MoT);

    foreach (int i in arr)
    {
        if (i <= pivot_val)
            loe.Add(i);
        else if (i > pivot_val)
            gt.Add(i);
    }

    List<int> resultSet = new List<int>();
    resultSet.AddRange(quicksort(loe));

    if (loe.Count == 0)
        loe.Add(pivot_val);
    else
        gt.Add(pivot_val);

    resultSet.AddRange(quicksort(gt));
    return resultSet;
}

它正确排序大小为10的数组,但是,它只排序并显示7个数字,而不是10个数字。我有什么想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

loe为空的情况下,您已将loe复制到loe之后,将透视值重新添加回loe.Add(pivot_val); 。这什么都不做。你应该替换

resultSet.Add(pivot_val);

{{1}}

或类似。