【问题标题】:Why is this insertion sort missing the first element?为什么这个插入排序缺少第一个元素?
【发布时间】:2021-11-15 05:02:51
【问题描述】:

在此插入排序实现方面需要帮助:

def insertion_sort(list):
    for i in range(1, len(list)):
        element = list[i]
        for j in range(i - 1, -1, -1):
            if list[j] > element:
                list[j+1] = list[j]
            else:
                break
        list[j+1] = element
    return list

当我使用list = [200, 2, 56, 234, 5, 21] 运行它时 它返回:[200, 2, 5, 21, 56, 234]

我错过了什么?

【问题讨论】:

    标签: python insertion-sort


    【解决方案1】:

    就是这样:

    def insertion_sort(list1):    
        
        for i in range(1, len(list1)):  
    
            value = list1[i]   
              
            j = i - 1  
            while j >= 0 and value < list1[j]:  
                list1[j + 1] = list1[j]  
                j -= 1  
            list1[j + 1] = value  
        return list1  
           
    list1 = [10, 5, 13, 8, 2]  
    print("The unsorted list is:", list1)  
    
    print("The sorted list1 is:", insertion_sort(list1))  
    

    【讨论】:

    • 您可能想要描述为什么会有所不同:简而言之,for j in range(i-1, -1, -1) 从未将j 设置为-1,范围首先停止迭代。相反,while j &gt;= 0 确实允许j 在循环结束时读取-1。这使得最后的分配总是正确的,而不是在你迭代到最后时减少一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    相关资源
    最近更新 更多