Pregunta

He el siguiente código, (tomado de aquí), pero causa una excepción stackoverflow cuando hay dos del mismo valor en la lista para ordenar.

Alguien me puede ayudar lo que está causando esto?

 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));
}
¿Fue útil?

Solución

Usted no debe estar haciendo una llamada recursiva a tipo _same - usted sabe que ordenadas, ya que todos los valores son los mismos

!

Otros consejos

Pero no es completa:. Seleccionar el primer elemento como pivote y no la clasificación de la primera subserie más pequeño también se desbordará su pila

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top