这是一个奇怪的问题,我已经实现了简单的快速排序如下..
static void Main(string[] args)
{
List<int> unsorted = new List<int> { 1, 3, 5, 7, 9, 8, 6, 4, 2 };
List<int> sorted = quicksort(unsorted);
Console.WriteLine(string.Join(",", sorted));
Console.ReadKey();
}
private static List<T> quicksort<T>(List<T> arr) where T : IComparable<T>
{
List<T> loe = new List<T>(), gt = new List<T>();
if (arr.Count < 2)
return arr;
int pivot = arr.Count / 2;
T pivot_val = arr[pivot];
arr.RemoveAt(pivot);
foreach (T i in arr)
{
if (i.CompareTo(pivot_val) <= 0)
loe.Add(i);
else
gt.Add(i);
}
List<T> resultSet = new List<T>();
resultSet.AddRange(quicksort(loe));
gt.Add(pivot_val);
resultSet.AddRange(quicksort(gt));
return resultSet;
}
输出为:1,2,3,4,5,6,7,8,9
但是当我在未排序列表中使用任何负数时,会出现 stackoverflow 错误,
例如,如果 List unsorted = new List { 1, 3, 5, 7, 9, 8, 6, 4, 2, -1 }; 现在有一个stackoverflow ..
这是怎么回事?为什么这不起作用?