Допустимо ли такое перемешивание в обратном порядке?

Как известно, алгоритм перемешивания массива, списка и т. д. несложен: взять случайный элемент и поменять местами с последним, затем взять случайный элемент, кроме последнего, и поменять местами с предпоследним, затем взять случайный элемент, кроме двух последних, и поменять местами с третьим с конца и т. д. Но что делать, когда неизвестно, какой элемент окажется последним? Для такого случая я придумал алгоритм, перемешивающий наоборот: каждый добавляемый элемент меняет местами со случайным из уже добавленных. Я тестировал, вроде перемешивает. Но будет ли хорошей "мера случайности" полученного списка? И не несет ли этот алгоритм скрытых багов и проблем?

Вот код, для работы ему требуется передать переменные source (перемешиваемая последовательность, подойдет любой IEnumerable<T>) и random (сам "миксер"):

C#Выделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

            List<T> result = new(1024);
            int blend;
            var i = 0;
            foreach (var item in source)
            {
                blend = random.Next(i + 1);
                if (blend == i)
                    result.Add(item);
                else
                {
                    result.Add(result._items[blend]);
                    result._items[blend] = item;
                }
                i++;
            }
            return result;