原理:
将列表假设分成两部分,第一部分为列表的第一个元素(有序序列),剩下的元素(无序序列)
将无序序列的元素逐一插入到有序序列的合适位置.
49 |
38 |
65 |
97 |
27 |
第一遍:
- 49 38 65 97 27
- 38<49放在49左侧 38 49 65 97 27
- 65>49 放在49右侧 38 49 65 97 27
- 97>65 放在65右侧 38 49 65 97 27
第二遍:
- 27 < 97 放在97左侧 38 49 65 27 97
- 27<65 y放在65左侧 38 49 27 65 97
- 27<49 y放在49左侧 38 27 49 65 97
- 27<38 y放在38左侧 27 38 49 65 97
代码实现:
核心代码:
有序序列只有一个元素,无序序列元素个数为n-1
i = 1 表示列表下标,还表示有序序列中元素的个数
while i >= 1:
if alist[i] < alist[i-1]: # 无序序列的第一个元素比有序列最后一个元素小
alist[i],alist[i-1] = alist[i-1],alist[i] # 无序序列第一个元素放在有序列左侧,即互换
i -= 1 # 有序序列有多个元素需要多次对比
else: # 比有序序列的元素大则停止
break
完整代码实现
def sort(alist):
for i in range(1,len(alist)):
while i >= 1:
if alist[i] < alist[i-1]:
alist[i],alist[i-1] = alist[i-1],alist[i]
i -= 1
else:
break
return alist