"Мы изменили сортировку слиянием, чтобы, когда вы уже отсортировали массив, он останавливался и возвращал массив без вызова еще 2 рекурсивных вызовов."
Так работает нормальная сортировка слиянием. После сортировки массива (или раздела массива) он больше не вызывает рекурсивных вызовов, он просто возвращает отсортированный массив. Рекурсия называется , чтобы отсортировать секцию массива в первую очередь.
Возможно, вы хотели сказать: «Прежде чем мы рекурсивно сортируем 2 половинки и объединяем их, мы проверяем, не отсортирован ли массив». Это было бы бесполезно для массивов с разными номерами, так как была бы крайне низкая вероятность (1/n!
) того, что массив будет отсортирован.
На вашем примере это более интересно, однако, если массив имеет только log(n)
разных чисел, я бы порекомендовал упорядочить уникальные значения и создать хэш-карту от значения к индексу, что быстро только для значений log(n)
, а затем вы например, можно сортировать по линейному времени с помощью сортировки по сегментам.