我的插入 python 排序总是将第二个数字放在开头

My insertion python sort is always placing the second number at the beginning

我的代码大部分工作正常,除了一个小错误,它会将第二个元素放在开头,而不管值如何,例如1,6,2,9,3,8,4,7,5,0 会变成 6,0,1,2,3,4,5,7,8,9

我试过稍微改变 FOR 循环中的数字,但除此之外真的看不出问题所在

def InsertionSort(array):
    for i in range(len(array)):
        for j in range(len(array)):
            if array[i] <= array[j+1]:
                new = array.pop(i)
                array.insert(j+1,new)
                break
            elif array[i] > array[j+1]:
                continue
        print (array)

任何时候您修改正在循环访问的集合时,您都可能会得到与预期不同的行为。当您从集合中删除项目时尤其如此,因为它会扰乱当前索引。

这是一个简单地交换元素顺序的示例(同时还打印调试信息,以便您可以准确地看到发生了什么):

def insertionSort(my_list):
    # for every element in our array
    for index in range(1, len(my_list)):
        current = my_list[index]
        position = index

        while position > 0 and my_list[position-1] > current:
            print("Swapped {} for {}".format(my_list[position], my_list[position-1]))
            my_list[position] = my_list[position-1]
            print(my_list)
            position -= 1

        my_list[position] = current

    return my_list

my_list = [8,2,1,3,5,4]

print(insertionSort(my_list))

这里的问题是,你将第二个元素的位置与第一个元素调换了位置,但后来不再比较它了。

这里的实现与您的很接近,只是为了处理所有条目而稍作改动

ar =[1,6,2,9,3,8,4,7,5,0]
def InsertionSort(array):
    for i in range(len(array)):
            val = array[i]
            while( i > 0 and array[i-1] > val):
                array[i] = array[i-1]
                i = i - 1
            array[i] = val
    print (array)

InsertionSort(ar)