Skip to main content
 首页 » 编程设计

python之仅使用 For 循环在 Python 中实现插入排序

2025年05月04日14davidwang456

我尝试仅使用 for 循环实现插入排序并编写了以下代码:

def isort(L):    #implementation with a for loop 
    for i in range(1,len(L)): 
        small = L[i] 
        M = range(i) 
        M.reverse() 
        for j in M: 
            if small<L[j]: 
                L[j+1]=L[j] 
            else: 
                break 
        L[j+1] = small 
    return L 
 
L = [5,4,3,2,1] 
M = isort(L) 
print M 

这给出了输出 [5,1,2,3,4]。谁能指出我哪里出错了

请您参考如下方法:

更改(问题中显示的修复很简单,一次性错误是由一点点 +1 造成的:)):

L[j+1] = small 

收件人:

L[j] = small 

测试:

>>> isort([5, 4, 3, 2, 1]) 
[1, 2, 3, 4, 5] 

但是,如图所示,您的代码还有其他一些问题 - 它在很多时候都不起作用。通过一些调整,我们可以让它工作:

def isort(L): 
    for i in range(1,len(L)): 
        small = L[i] 
        M = range(-1, i) 
        M.reverse() 
        for j in M: 
            if j>=0 and small<L[j]: 
                L[j+1]=L[j] 
            else: 
                break 
        L[j+1] = small 
    return L 

测试:

>>> isort([4, 5, 3, 2, 1]) 
[1, 2, 3, 4, 5]