1,方法一
1)原理:當某一次內迴圈中沒有數字交換,則說明列表內的數字已經是從小到大排序,這時就可停止執行程式
2)程式碼:
lis = [1,4,3,2,5, 6,7,8, 9, 10,11,12, 13, 14,15]def sortport(): for i in range(len(lis) - 1): flag = 0 for j in range(len(lis) - 1 - i): if lis[j] > lis[j + 1]: lis[j], lis[j + 1] = lis[j + 1], lis[j]# 如果交換,則flag的值改為1 flag = 1 print(lis) print(flag)# 如果沒有交換,則flag的值仍為0,可以停止執行程式 if flag == 0: return lis return lis
3)執行結果:
[1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
0
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
1,方法二
1)原理:最後一次交換後的數字均已有序,則下一輪排序至最後一次交換的數字即可結束
2)程式碼:
lis = [1,4,3,2,5, 6,9,8,7, 10,11,12, 13, 14,15]def sortport(): k = len(lis) - 1 pos = 0 for i in range(len(lis) - 1): flag = 0 #記錄是否發生交換 for j in range(min(len(lis) - 1 - i,k)): if lis[j] > lis[j + 1]: lis[j], lis[j + 1] = lis[j + 1], lis[j]# 如果交換,則flag的值改為1 flag = 1 pos = j #記錄最後一個交換位置 print(lis) print(flag) k = pos # 記錄最後一個交換位置 print(k)# 如果沒有排序,則flag的值仍為0,可以停止執行程式 if flag == 0: print(k) return lis return lisif __name__ == '__main__': sortport() print(lis)