1: Зачем создавать aux?
Поскольку метод mergeSort
требует массива источника и назначения.
2: Как происходит сортировка?работает, если код сортирует aux?
Поскольку метод mergeSort
сортирует от aux
до a
3: Разве это не пустая трата ресурсов на клонирование массива перед сортировкой?
Нет, это не ... использование этой реализации mergeSort
.Теперь, если sort
вернул отсортированный массив, создание клона (а не создание пустого массива) было бы расточительным.Но API требует, чтобы он выполнял сортировку на месте, а это означает, что a
должно быть «местом назначения».Поэтому элементы необходимо скопировать во временный массив, который будет «источником».
Если вы посмотрите на метод mergeSort
, вы увидите, что он рекурсивно разбивает массив для сортировки, объединяявперед и назад между массивами источника и назначения.Чтобы это работало, вам нужно два массива.Предположительно Sun / Oracle определили, что этот алгоритм обеспечивает хорошую производительность для типичных сценариев использования Java-сортировки.