2010-01-19 68 views
0

我有下面的代码,(从这里取得),但它会导致一个stackoverflow异常时,列表中有两个相同的值进行排序。快速排序导致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)); 
} 
+0

对于哪些输入序列失败? – 2010-01-19 12:55:48

+0

我想我们很感谢这个网站的快速排序* rimroll * – 2010-01-19 12:56:03

回答

4

你不应该做,以排序_same递归调用 - 你知道它的排序,因为所有的价值都是一样的!

+0

斑点:) +1 – leppie 2010-01-19 12:52:12

0

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