#arrays #algorithm #sorting #mergesort
#массивы #алгоритм #сортировка #сортировка слиянием
Вопрос:
Используя код из этой ссылки, merge
функция не имеет while
цикла для оставшихся j
элементов из правой части массива temp ( helper
) в массив original ( numbers
) .
Он по-прежнему работает нормально. Мне было интересно, может ли кто-нибудь помочь объяснить, почему j
всегда достигает high
(из-за чего в правой части массива нет оставшихся элементов helper
, которые нужно просто скопировать в numbers
массив).
Ответ №1:
Функция merge(low, middle, high)
начинается с копирования элементов numbers
в helper
массив.
Вот почему numbers
в массиве уже есть элементы, и нет смысла копировать их обратно из helper
.
Комментарии:
1. О! Итак, это так: поскольку
j
указывает на вторую половину массива, нам не нужно копировать оставшиеся отсортированные элементы из индексовj
вhigh
, потому что они уже отсортированы предыдущими рекурсионными вызовамиmerge
и уже сохранены вnumbers
массиве. Я правильно понял? Пожалуйста, дайте мне знать.2. Хорошее объяснение.. Даже у меня были такие же сомнения!!