Что я могу добавить в свой код, чтобы показать в выходных данных все движения, которые произвела сортировка?

#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. Вы не добавили print внутри цикла.

2. Куда мне следует вставить функцию печати?