Построчное объяснение алгоритма сортировки слиянием в C ++
Автор кратко объяснил здесь сортировку слиянием с представлением диаграммы и скриншотами кода, а также некоторыми рекомендуемыми ссылками. Также построчное объяснение выполнения программы для этого алгоритма на C ++.
Сортировка слиянием - это алгоритм «разделяй и властвуй», основанный на идее разбиения списка на несколько подсписок до тех пор, пока каждый подсписок не будет состоять из одного элемента, и объединения этих подсписок таким образом, чтобы в результате получился отсортированный список.
Диаграмма, поясняющая работу алгоритма сортировки слиянием
Теперь давайте закодируем этот алгоритм
Строка 62 (рис. 1): - Здесь начинается наша программа, объявляющая массив с именем myarray из «5» и объявляющая целое число для хранения размера массива, равного « 5 ”с именем arr_size. Теперь просим пользователя ввести элементы для массива, а затем распечатать массив перед сортировкой.
Строка 76 (рис. 1): - Здесь мы вызываем функцию mergeSort для сортировки, передавая массив, крайний левый индекс и крайний правый индекс массива.
Теперь напишем код для функции mergeSort
Строка 48 (рис. 2): - Теперь в этой функции мы берем параметры, массив, крайний левый индекс и крайний правый индекс соответственно.
Строка 49 (рис. 2): - В этом случае мы проверяем, является ли крайний левый индекс массива, равный 0, меньше, чем крайний правый индекс (крайний правый индекс может быть любым числом, в зависимости от размер массива). Очевидно, что крайний левый индекс всегда стремится к нулю. Итак, цель проверки - убедиться, что в массиве более одного элемента или нет.
Строка 51 (рис. 2): - Здесь мы находим средний индекс массива, который нужно разделить и победить.
Перед тем, как перейти к следующему, вы должны хотя бы услышать о рекурсивных функциях, а если нет, то просто погуглите это для краткого обзора.
Строка 54 (рис. 2): - Здесь мы делим массив на левую часть, поэтому мы передаем параметры как массив, крайний левый и средний (который является крайним правым индексом для левой половины массив).
Строка 55 (рис. 2): - Здесь мы делим массив на правую часть, поэтому мы передаем параметры как массив, средний + 1 (который является крайним левым для правой половины массива) , право самое.
Строка 58 (рис. 2): - Здесь мы вызываем функцию merge для объединения массивов путем их сортировки. И передача аргументов в виде массива, крайний левый, средний, крайний правый.
ПРИМЕЧАНИЕ. - Чтобы понять рекурсию, происходящую в приведенном выше коде, я рекомендую вам посмотреть приведенное ниже видео с определенной продолжительности (с 11:30 до последнего).
Теперь давайте напишем код для функции слияния
Строка 4 (рис. 3): - В этой функции слияния мы передаем параметры как массив, крайний левый, крайний правый и средний. И инициализация некоторых целых чисел, таких как, i, который будет крайним левым индексом, j, который представляет начало правой части массива, и k, самым левым.
Строка 9 (рис. 3): - Создание временного массива для хранения отсортированных элементов.
Строка 10 (рис. 3): - Здесь мы даем два условия для запуска цикла while, первое - проверять, меньше ли крайний левый индекс среднего или равен среднему, а второе - проверять, j меньше или равно крайнему правому краю или нет.
Проверяя цикл while, мы делаем так, чтобы цикл оставался левой частью, как левая, а правая - правой. Затем сравниваем элементы для обмена.
И проделаем то же самое в следующих циклах while, чтобы сравнить левую часть с правой.
Строка 34 (рис. 3): - Сохранение отсортированного массива в arr для передачи в параметр.
Затем, как и в основной функции, мы печатаем после вызова функции сортировки слиянием.
Итак, все было о сортировке слиянием, о том, как она работает, и о объяснении.