Quicksort provoca StackOverflow
-
21-09-2019 - |
Domanda
Ho il seguente codice, (tratto da qui), ma provoca un'eccezione StackOverflow quando c'è due dello stesso valore nella lista di ordinamento.
Qualcuno mi può aiutare che cosa sta causando questo?
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));
}
Soluzione
Non si dovrebbe fare una chiamata ricorsiva per sort _same
- sai che è ordinato, dal momento che tutti i valori sono gli stessi
Altri suggerimenti
Ma non è completa:. Selezionare il primo elemento come perno e non l'ordinamento il più piccolo sottoarray prima sarà anche traboccare il vostro stack
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow