原理:
- 依次從未排序list中取數(shù)據(jù)去構(gòu)建有序數(shù)列
- 拿出的新數(shù)據(jù)依次與有序數(shù)列中數(shù)據(jù)比較找到自己的位置(可看做打撲克放牌)
代碼實(shí)現(xiàn)
#直接插入排序
def insert_sort(num_list):
#第一個(gè)數(shù)認(rèn)為為有序list,其他的數(shù)據(jù)認(rèn)為為無(wú)序list
for i in range(1,len(num_list)):
#拿出無(wú)序list的第一個(gè)數(shù)
num = num_list[i]
#有序數(shù)列的最后一個(gè)數(shù)的index
j = i - 1
#從后至前循環(huán)有序list陌僵,依次與新num比較,直到比較的數(shù)字小于等于新num
while j >= 0 and num_list[j] > num:
#比較數(shù)字大于新num時(shí)伊脓,把該值向后移動(dòng)一位
num_list[j + 1] = num_list[j]
j -= 1
#把新數(shù)據(jù)插入到有序數(shù)列空出的位置
#由于比較結(jié)束后仍舊執(zhí)行了依次j-1,所以空的索引位置是j+1
num_list[j + 1] = num
return num_list
if __name__ == '__main__':
num_list = [1,4,6,7,9,3]
result = insert_sort(num_list)
print(result) #[1, 3, 4, 6, 7, 9]