选择在Python中排序不起作用

时间:2015-06-26 19:12:46

标签: python algorithm sorting

我正在研究算法,从冒泡排序开始,现在开始选择排序。这是我正在使用的代码:

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]

知道为什么会陷入困境吗?谢谢!

1 个答案:

答案 0 :(得分:2)

你实际上做错了,你在每次迭代中用ith交换minIndex位置元素,即使它不是实际的minIndex(你是在内环)

你需要在内部循环之外进行交换,以便在内部循环中找到具有最小值元素的索引,然后交换ithminIndex位置元素。

示例 -

>>> 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]