Я тестирую код, который я написал, чтобы перетасовать элементы массива. Хотя это не настоящий «профессиональный тест», мне было интересно узнать о результатах.
Я создал случайный массив и продолжал перетасовывать его до тех пор, пока массив не будет отсортирован. Я ожидал, что количество раз, чтобы получить отсортированный порядок, будет вокруг n!/2, и максимальные перетасовки должны быть вокруг n !, где n - количество элементов в массиве.Тест на перетасование кода
С 5 элементами количество перетасовки в среднем составляет около 108 и от 6 до 615. Я был удивлен, увидев, что некоторые перетасовки заняли более 500 раз, даже если у меня было всего 5 элементов.
Мой вопрос в том, что есть объяснение для этого результата и/или мои аргументы в пользу правильного правильного тасования? Мой код в случайном порядке
void shuffle(int* array, int length)
{
int i=0;
int r =0;
for(i=0;i<length;i++)
{
r = randomInRange(0,i);
swap(array,i,r);
}
}
Это (в) известный [bogosort] (https://en.wikipedia.org/wiki/Bogosort). – pmg
Сортированный заказ один в n! возможные заказы. Если тасовка производит каждый порядок с равной вероятностью 1/n! количество сортировок, необходимых для сортировки, имеет [геометрическое распределение] (https://en.wikipedia.org/wiki/Geometric_distribution) с ожидаемым значением n !. – Joni
Худший случай неограничен. Также возможно, что производительность зависит от распределения случайных чисел. – Daniele