個人技術博客地址:http://songmingyao.com/
原理
- 在列表左側構建有序序列
- 一開始將第一個元素視為有序序列
- 對于未排序序列,則將未排序序列中的元素依次從右到左與已排序序列中的元素做比較
- 如果未排序元素小于當時比較的已排序元素,則將該已排序元素右移
- 如果未排序元素大于當時比較的已排序元素,則說明該元素已插入到合適位置,此輪循環結束
- 以此類推
源碼
def insert_sort(l):
n = len(l)
# 要排序的元素
for i in range(1, n):
# 已排序的元素
for j in range(i, 0, -1):
if l[j] < l[j-1]:
l[j], l[j-1] = l[j-1], l[j]
else:
break
if __name__ == '__main__':
l = [6, 5, 2, 8, 9, 4, 1, 0, 3, 7]
print(l)
insert_sort(l)
print(l)
時間復雜度
- 最優時間復雜度:O(n)
- 最壞時間復雜度:O(n2)
- 穩定性(多個元素等值的情況下是否會破壞原有順序):穩定