Первым алгоритмом является O (n), так как он имеет цикл, который выполняет перестановку O (1) на каждой итерации.Второй алгоритм - O (n ^ 2), так как он выполняет операцию O (n) RemoveAt на каждой итерации.Кроме того, индексаторы в списках работают медленнее, чем индексы в массивах, поскольку первый - это вызов метода, а второй - инструкция IL.
Таким образом, первый из них, вероятно, будет быстрее.Тем не менее, если вы после выступления, зачем беспокоиться о достижении результатов?Он уже преобразуется в массив, поэтому просто перетасуйте его на место и верните массив напрямую (или оберните в ReadOnlyCollection<T>
, если вы беспокоитесь о том, что люди его изменят), что, вероятно, еще быстрее.обратите внимание, что оба метода имеют ошибки, что поведение Random
при использовании несколькими потоками не определено, поэтому они, вероятно, должны использовать потокобезопасный генератор случайных чисел .