Quicksort hace stackoverflow
-
21-09-2019 - |
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));
}
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