选择排序 - 蟒蛇

时间:2018-01-22 14:16:33

标签: python algorithm sorting selection-sort

我似乎无法让我的选择排序工作。有什么想法错了吗?运行时它给了我[5,6,3,1]

THX!

aList = [1,5,6,3]

def selection_sort( aList):
    for i in range(len(aList)):
        min = i
        j = i + 1
        for j in range(len(aList)):
            if aList[j] < aList[min]:
                min = j
        swap(aList, min, i)
    print(aList)

def swap(aList, x, y):
    temp = aList[x]
    aList[x] = aList[y]
    aList[y] = temp

selection_sort(aList)

2 个答案:

答案 0 :(得分:1)

正如我在评论中提到的那样,在我看来你使用j = i + 1希望它会以某种方式影响后续循环中的j,但它是一个不同的变量。函数定义中的aList也是如此,它可以有任何名称,甚至是aList。您的j会一次又一次地遍历整个列表,因此min或最小值会在i的任何位置进行(因此它最终会结束)。所以你需要做的是让你的第二个循环只遍历i之后的下一个项目。

aList = [1,5,6,3]

def selection_sort(List):
    for i in range(len(List)):
        min = i
        for k in range(i,len(List)):
            if List[k] < List[min]:
                min = k
        swap(List, min, i)
    print(List)

def swap(List, x, y):
    temp = List[x]
    List[x] = List[y]
    List[y] = temp

selection_sort(aList)

答案 1 :(得分:0)

def select_sort(l):
    for i in range(len(l)):
        min_loc = i
        for j in range(i+1, len(l)):
            if l[j] < l[min_loc]:
                min_loc = j
        l[min_loc],l[i] = l[i], l[min_loc]
    return l