Почему использование случайного выбора при сортировке вызывает [Ошибка сортировки IComparer.Compare]

Я попытался перетасовать список байтов (List), используя любой код:

myList.Sort((a, b) => this._Rnd.Next(-1, 1));

или

myList.Sort(delegate(byte b1, byte b2)
{
    return this._Rnd.Next(-1, 1);
});

, и они выдали следующую ошибку:

Не удалось выполнить сортировку, потому что метод IComparer.Compare () возвращает противоречивые результаты. Либо значение не сравнивается с самим собой, либо одно значение, многократно сравниваемое с другим значением, дает разные результаты. x: '{0}', тип x: '{1}', IComparer: '{2}'.

Что плохого в использовании случайной функции вместо функции сравнения байтов?

Я пробовал использовать LINQ функция вместо этого, и она работает.

var myNewList = myList.OrderBy(s => Guid.NewGuid());
var myNewList = myList.OrderBy(s => this._Rnd.NextDouble());

Я действительно читал, что эти методы медленнее, чем тасование Фишера – Йейтса, давая только время выполнения O (n). Но вот как раз интересно использовать функцию сортировки и случайный.

6
задан Nap 9 November 2010 в 02:34
поделиться