我正在使用以下算法,我在互联网上找到并修改了一下,找到了三个中位数:
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个数字。我有什么想法可以解决这个问题吗?
答案 0 :(得分:1)
在loe
为空的情况下,您已将loe
复制到loe
之后,将透视值重新添加回loe.Add(pivot_val);
。这什么都不做。你应该替换
resultSet.Add(pivot_val);
带
{{1}}
或类似。