[英]Insertion Sort: Incorrect output
我試圖通過編寫一些腳本來了解有關插入排序算法的更多信息,但是我陷入了困境。
一切正常,除了一個數字被多次顯示。
我的代碼:
#
# Insertion Sort
#
def _ord(l):
lst=[]
for k in l:
if not lst:
lst.append(k)
continue
for a,b in enumerate(reversed(lst)):
if k <= lst[a]:
lst.insert(a,k)
if a == len(lst)-1:
lst.append(k)
return lst
if __name__ == '__main__':
l = [3,2,4,6,5,1]
print _ord(l)
輸出:
[1, 1, 1, 1, 1, 2, 3, 4, 5, 6]
def _ord(l):
lst=[]
for k in l:
print k
if not lst:
lst.append(k)
continue
for a,b in enumerate(reversed(lst)):
print a, b
if k <= lst[a]:
lst.insert(a,k)
break # <-- add this
if a == len(lst)-1:
lst.append(k)
print lst
print '-' * 80
return lst
l = [3,2,4,6,5,1]
print _ord(l)
您可以使用print
或pdb
調試代碼。
這里的問題是,對於列表中的所有其他整數,當k=1
, k <= lst[a]
為True
,它將插入五次。
對該片段的快速修復是引入break
:
def _ord(l):
lst=[]
for k in l:
if not lst:
lst.append(k)
continue
for a,b in enumerate(reversed(lst)):
if k <= lst[a]:
lst.insert(a,k)
break
if a == len(lst)-1:
lst.append(k)
return lst
if __name__ == '__main__':
l = [3,2,4,6,5,1]
print _ord(l)
編輯:看看這個鏈接 ,以檢查您的片段的執行。
def _old(l): for i in range(1, len(l)): tmp = l[i] for j in reversed(range(i)): if l[j] > tmp: l[j+1] = l[j] l[j] = tmp else: break return l if __name__ == '__main__': l = [3,2,4,6,5,1] print(_old(l))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.