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));
}
È stato utile?

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
scroll top