我正在研究算法,从冒泡排序开始,现在开始选择排序。这是我正在使用的代码:
test = [5, 3, 6, 1, 8, 7, 2, 4]
def selection_sort(items):
for i in range(0, len(items)-1):
minIndex = i
for j in range(i + 1, len(items)):
if items[j] < items[minIndex]:
minIndex = j
if minIndex != i:
items[i], items[minIndex] = items[minIndex], items[i]
print("Before: ", test)
selection_sort(test)
print("After: ", test)
问题是我得到的输出是:[1, 3, 4, 2, 5, 6, 7, 8]
当我再次运行它时,我得到正确的输出:[1, 2, 3, 4, 5, 6, 7, 8]
知道为什么会陷入困境吗?谢谢!
答案 0 :(得分:2)
你实际上做错了,你在每次迭代中用ith
交换minIndex
位置元素,即使它不是实际的minIndex
(你是在内环)
你需要在内部循环之外进行交换,以便在内部循环中找到具有最小值元素的索引,然后交换ith
和minIndex
位置元素。
示例 -
>>> test = [5, 3, 6, 1, 8, 7, 2, 4]
>>> def selection_sort(items):
... for i in range(0, len(items)-1):
... minIndex = i
... for j in range(i + 1, len(items)):
... if items[j] < items[minIndex]:
... minIndex = j
... if minIndex != i:
... items[i], items[minIndex] = items[minIndex], items[i]
...
>>> selection_sort(test)
>>> test
[1, 2, 3, 4, 5, 6, 7, 8]