Поскольку вы выполняете случайное перемешивание, вы в основном касаетесь каждого элемента хотя бы один раз, поэтому у вас уже есть большое О, равное по крайней мере N. Если вы выберете случайный индекс, то протестируйте элемент в этом месте, то вы получить переменную, которую вы хотите, прежде чем вы коснулись N элементов, гарантировано, таким образом, гарантированное улучшение. Если у вас есть 20% распределения элементов, то вы ожидаете, что каждый 5-й случайный индекс даст вам элемент, который соответствует вашим критериям. Хотя это и не гарантия, но и вероятность. В худшем случае, вы бы выбрали все 80% элементов, которые не соответствовали вашим критериям, тогда следующим будет ваш случайный элемент. Ваше максимальное выполнение будет ограничено до 0,8 + 1, но все же лучше, чем N. и в среднем ваша большая стоимость O будет равна константе 5-10. WAAAAY лучше с точки зрения исполнения при увеличении N.