#python #arrays #python-3.x #list #sorting
Вопрос:
Что я хотел для своего кода, так это показать все движения, которые произвела сортировка. Для других моих кодов, таких как Сортировка пузырьков, Вставка и выделение, я успешно распечатал все пропуска для него. Но когда я попробовал это при слиянии кода, на выходе выводится отсортированный массив только несколько раз.
def mergeSort(nums): if len(nums) gt; 1: mid = len(nums) // 2 left = nums[:mid] right = nums[mid:] mergeSort(left) mergeSort(right) i = 0 j = 0 k = 0 while i lt; len(left) and j lt; len(right): if left[i] lt;= right[j]: nums[k] = left[i] i = 1 else: nums[k] = right[j] j = 1 k = 1 while i lt; len(left): nums[k] = left[i] i = 1 k = 1 while j lt; len(right): nums[k] = right[j] j = 1 k = 1 nums = [9, 7, 5, 3, 1] n = len(nums) for i in range(n): mergeSort(nums) print(nums)
Ответ №1:
Функция печати размещается после того, как вы отсортировали список, поэтому она печатает только отсортированный список. Так что, по сути, просто поместите печать где-нибудь внутри кода, например
def mergeSort(nums): if len(nums) gt; 1: mid = len(nums) // 2 left = nums[:mid] right = nums[mid:] mergeSort(left) mergeSort(right) i = 0 j = 0 k = 0 while i lt; len(left) and j lt; len(right): if left[i] lt;= right[j]: nums[k] = left[i] i = 1 else: nums[k] = right[j] j = 1 k = 1 while i lt; len(left): nums[k] = left[i] i = 1 k = 1 while j lt; len(right): nums[k] = right[j] j = 1 k = 1 nums = [9, 7, 5, 3, 1] n = len(nums) for i in range(n): mergeSort(nums) print(nums)
Дает:
[9] [7] [7, 9] [5] [3] [1] [1, 3] [1, 3, 5] [1, 3, 5, 7, 9] [1] [3] [1, 3] [5] [7] [9] [7, 9] [5, 7, 9] [1, 3, 5, 7, 9] [1] [3] [1, 3] [5] [7] [9] [7, 9] [5, 7, 9] [1, 3, 5, 7, 9] [1] [3] [1, 3] [5] [7] [9] [7, 9] [5, 7, 9] [1, 3, 5, 7, 9] [1] [3] [1, 3] [5] [7] [9] [7, 9] [5, 7, 9] [1, 3, 5, 7, 9]
Комментарии:
1. Вы не добавили
2. Куда мне следует вставить функцию печати?