Quicksort导致stackoverflow

时间:2010-01-19 12:42:31

标签: c# quicksort stack-overflow

我有以下代码(从这里开始),但是当列表中有两个相同的值要排序时,它会导致stackoverflow异常。

有人可以帮我解决导致这种情况的原因吗?

 public static IEnumerable<int> QSLinq(IEnumerable<int> _items)
{
    if (_items.Count() <= 1)
        return _items;

    var _pivot = _items.First();

    var _less = from _item in _items where _item < _pivot select _item;
    var _same = from _item in _items where _item == _pivot select _item;
    var _greater = from _item in _items where _item > _pivot select _item;

    return QSLinq(_less).Concat(QSLinq(_same)).Concat(QSLinq(_greater));
}

2 个答案:

答案 0 :(得分:4)

您不应该对排序 _same进行递归调用 - 您知道它已排序,因为所有值都相同!

答案 1 :(得分:0)

但不完整:选择第一个元素作为数据透视而不是先排序最小的子数组也会溢出你的堆栈。