首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的选择排序不起作用

Python中的选择排序不起作用
EN

Stack Overflow用户
提问于 2015-06-27 03:12:46
回答 1查看 74关注 0票数 2

我正在学习算法,从冒泡排序开始,现在开始学习选择排序。下面是我正在使用的代码:

代码语言:javascript
复制
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]

你知道为什么它被追上了吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-06-27 03:17:06

您实际上这样做是错误的,在每次迭代中,您都会用minIndex替换ith position元素,即使它不是实际的minIndex (您是在内部循环中进行的)。

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

示例:

代码语言:javascript
复制
>>> 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]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31080545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档