排序算法采用三中位数
本文关键字:中位数 算法 排序 | 更新日期: 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);
或类似.