排序算法采用三中位数

本文关键字:中位数 算法 排序 | 更新日期: 2023-09-27 18:03:43

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

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个数字。有什么好主意吗?

排序算法采用三中位数

loe为空的情况下,您已经将loe复制到结果后,将枢轴值添加回loe。这没有任何作用。你应该替换

loe.Add(pivot_val);

resultSet.Add(pivot_val);

或类似.