选择排序问题:为什么列表中最大的元素放在列表的最前面?

Selection Sort Issue: Why is the biggest element of the list put at the front of the list?

我一直在使用 Python 3 练习 SELECTION SORT 以及我从文件中读取的列表列表。我正在尝试按每个内部列表 (List[i][0]) 的第一个元素的升序打印列表。

这是我的清单: [[130.0, 266.07], [46.0, 174.14], [169.0, 187.01], [179.0, 488.69], [53.0, 401.53], [128.0, 106.88], [97.0, 398.33], [152.0, 493.87], [ 20.0, 205.43], [94.0, 248.14]]

但是,使用此代码:

def swapElements(aList, a, b):
    temp = aList[a]
    aList[a] = aList[b]
    aList[b] = temp

def selection_sort(aList):
    for i in range(0, len(aList)):
        minimum = 0
        for j in range(i, len(aList)):
            if aList[j][0] < aList[minimum][0]:
                minimum = j
        if minimum != i:
            swapElements(aList, i, minimum)
    print(aList)

输出始终将列表中最大的元素放在开头:

[[179.0, 488.69], [20.0, 205.43], [46.0, 174.14], [53.0, 401.53], [94.0, 248.14], [97.0, 398.33], [128.0, 106.88], [130.0 , 266.07], [152.0, 493.87], [169.0, 187.01]]

任何人都可以解释原因并指出我的代码错在哪里吗?

你的范围有点偏离。与wikipedia article比较。你的符号中的算法:

def swapElements(lst, a, b):
    lst[a], lst[b] = lst[b], lst[a]

def selection_sort(aList):
    for i in range(len(aList)-1):         # -1 is vital!
        minimum = i                       # the minimum index starts at i; not 0
        for j in range(i+1, len(aList)):  # here it's the +1
            if aList[j][0] < aList[minimum][0]:
                minimum = j
        if minimum != i:
            swapElements(aList, i, minimum)
    print(aList)

正如我在评论中提到的:python 可以像这样简单地交换值:lst[a], lst[b] = lst[b], lst[a].