【问题标题】:Trouble implementing part of selection sort执行部分选择排序时遇到问题
【发布时间】:2017-02-03 22:52:13
【问题描述】:

我已经在 python 中实现了选择排序,但无法理解内部 for 循环的这一小部分。

jfor 循环,我的范围从外部索引 i 到最大长度-1,这对我来说很有意义,但结果不会计算最后一个数字数组,我想不出原因。

但是,如果我将范围从 i 更改为最大长度,它将起作用。 (据我所知,这应该超过数组,因为 alist[len(alist)] 将计算 1 位数通过最大数)。

#Go over the loop, find the smallest num
def swap(arr, num_1, num_2):
    temp = arr[num_1]
    arr[num_1] = arr[num_2]
    arr[num_2] = temp

def selectionSort(alist):
    for i in range(0, len(alist)-1):
        min = i
        # for j in range(i+1, len(alist)):
        # Why len(alist)-1 doesn't work?
        for j in range(i, len(alist)-1):
            if alist[j] < alist[min]:
                min = j
        if min != i :
            swap(alist,i,min)
    return alist


# Test
print "-------------Test--- ----------"
A = [2,1,9,3,4,100,99,30]
print selectionSort(A)

【问题讨论】:

    标签: python selection-sort


    【解决方案1】:

    再次阅读 Python 中的范围;你没有一个清晰的概念 他们。例如,range(0, 3) 大致相当于[0, 1, 2]。 它在第二个值附近停止。切片也是如此。

    【讨论】:

    • 我读了一遍,现在说得通了!但是,如果是这种情况,假设我想在测试用例中遍历这个数组 A,在外循环中遍历它们,我可以只使用 "for i in range(0, len(alist))" 吗?因为 len(alist) 是 8,它只会循环到 A[7]
    • 嗯,这会起作用,因为您的程序设置方式。但是如果我正在编写一个选择排序,我会在倒数第二个项目处停止外循环,并在i+1 处开始j。另请注意,从零开始是默认设置,因此您可以直接说 for i in range(len(alist))
    • 您介意详细说明您的想法吗?我正在查看某人对选择排序的实现,它的实现方式与您描述的完全一样。如果说,你停止外循环@倒数第二个项目,那么你不会忽略数组中的最后一个项目吗?也从 i+1 开始 j,这是否意味着你要排除 j 的情况'第项与自身比较?
    • 将数字与自身进行比较是没有意义的;它总是平等的。至于最后一项,我们不断向上交换价值较低的项目,因此最后一项将始终是最高价值的项目;如果不是,它会在某个时候向上交换。
    • 现在说得通了!!谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多