Сортировка слиянием: почему в правой части нет оставшихся элементов?

#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. Хорошее объяснение.. Даже у меня были такие же сомнения!!