【问题标题】:Selection Sort Python with no built ins [closed]没有内置插件的选择排序Python [关闭]
【发布时间】:2013-04-02 07:59:13
【问题描述】:

我知道 python 有一堆内置函数,但我尝试编码选择排序最小化内置函数,因为我试图理解算法。我的输出对于我的选择排序不正确。任何帮助表示赞赏!提前致谢。

def selection_sort(list):
    for index in range(0, len(list)):
        for i in range(index,len(list)):
            iSmall = index

            if list[iSmall] > list[i]:
                iSmall = i
        list[index], list[iSmall] = list[iSmall], list[index]
    return list  

if __name__ == '__main__':
    print selection_sort([5,2,4,6,1,3,])

【问题讨论】:

  • range 是内置的。 :)
  • 用内置类型的名称命名变量是不好的形式。
  • @ 投反对票的人——为什么?对我来说,这似乎是一个不错的问题,而且它不要求代码,只是调试帮助。
  • @Michael0x2a 要求的代码不好?我认为只有当你什么都没做时才要求代码(或其他任何东西)是不好的。
  • 我猜这被认为是一种无用的syntax error问题?

标签: python algorithm sorting selection


【解决方案1】:

iSmall = index 不合适。我没有提到所有评论者提到的任何事情,这都是真的(截至本次编辑)。所以,iSmall = index 的代码在正确的位置:

def selection_sort(list):
    for index in range(0, len(list)):
        iSmall = index
        for i in range(index,len(list)):
            if list[iSmall] > list[i]:
                iSmall = i
        list[index], list[iSmall] = list[iSmall], list[index]
    return list  

if __name__ == '__main__':
    print selection_sort([5,2,4,6,1,3,])

换句话说,您正在寻找最小数字的索引(并尝试将其存储在iSMall,但您在循环for i in range(index,len(list)): 的每次迭代中将iSmall 重置为index。所以iSmall 设置不正确,它始终设置为 index,除非在内部循环的最后一次迭代中将其更改为其他内容。

【讨论】:

    猜你喜欢
    • 2013-04-13
    • 1970-01-01
    • 2017-09-20
    • 2012-06-09
    • 2017-06-14
    • 1970-01-01
    • 2015-08-29
    • 2020-11-25
    • 2012-10-15
    相关资源
    最近更新 更多