Вы должны быть очень осторожны при использовании timeitмодуля в Python.
python -m timeit -s 'import random;a=range(10000);random.shuffle(a)' 'a.sort();a[-1]'
Здесь код инициализации запускается один раз для создания рандомизированного массива a. Затем остальной код запускается несколько раз. В первый раз он сортирует массив, но каждый раз вы вызываете метод сортировки для уже отсортированного массива. Возвращается только самое быстрое время, поэтому вы фактически рассчитываете, сколько времени потребуется Python для сортировки уже отсортированного массива.
Часть алгоритма сортировки Python состоит в том, чтобы определить, когда массив уже частично или полностью отсортирован. Когда он полностью отсортирован, ему просто нужно один раз просканировать массив, чтобы обнаружить это, а затем он останавливается.
Если вместо этого вы попробовали:
python -m timeit -s 'import random;a=range(100000);random.shuffle(a)' 'sorted(a)[-1]'
тогда сортировка происходит в каждом временном цикле, и вы можете видеть, что время на сортировку массива действительно намного больше, чем просто нахождение максимального значения.
Изменить: ответ @ skyking объясняет ту часть, которую я оставил необъясненной: a.sort()знает, что он работает со списком, поэтому может напрямую обращаться к элементам. max(a)работает с любой произвольной итерацией, поэтому необходимо использовать общую итерацию.