【发布时间】:2021-11-30 15:53:54
【问题描述】:
我正在尝试实现一种排序算法,该算法将找到数组中的最大和最小元素,然后将它们分别与数组的最后一个元素和第一个元素交换。然后算法将数组缩小两个元素(第一个和最后一个元素,已放置在排序位置),然后对子数组重复执行相同的操作,直到数组完全排序。
但我似乎无法让它发挥作用,我不知道为什么。没有任何类型的错误,但在运行函数后数组完全保持不变。这是我所拥有的:
def novel_sort(arr, left, right):
if left < right:
min_index = left
max_index = left
for i in range(left, right+1):
if arr[i] < arr[min_index]:
min_index = i
if arr[i] > arr[max_index]:
max_index = i
arr[left], arr[min_index] = arr[min_index], arr[left]
arr[right], arr[max_index] = arr[max_index], arr[right]
novel_sort(arr, left + 1, right - 1)
输入
l = [235, 25, 123, 1]
novel_sort(l, 0, len(l) - 1)
print(l)
预期输出
[1, 25, 123, 235]
观察到的输出
[235, 25, 123, 1]
如果我将for 循环更改为for i in range(left, right),那么除了最后一个元素([1, 123, 235, 25])之外,数组的每个元素都将被排序。我已经尝试过迭代,但我似乎仍然无法弄清楚发生了什么。
【问题讨论】:
标签: python arrays list algorithm sorting