直接插入排序:划分成2部分,前一部分是已排序,后一部分是未排序,每轮从未排序取一个数放在临时区中,然后拿它与已排序的部分比较,如果已排序中取到的值大于临时变量的值,已排序的值后移一位,依次比较把临时值插入到最后后移的数的位置。
已排序的值从第0个位置开始
待排序的值从第1个位置开始。
需要插入的次数为元素个数-1。
如 7,6,3,9,1,8
需要插入的次数6-1=5次
第一次插入。已排序区:7 未排序区 : 6,3,9,1,8 临时区的值 6 比较:7比6大,所以 7后移一位,然后把6插入到7原来的位置。 结束后的顺序值:6,7,3,9,1,8
第二次插入。已排序区:6,7 未排序区 : 3,9,1,8 临时区的值 3 比较:7比3大,所以 7后移一位,6比3大,后移一位
然后把3插入到6原来的位置。 结束后的顺序值:3,6,7,9,1,8
第3次插入。已排序区:3,6,7 未排序区 : 9,1,8 临时区的值 9 比较:9比7大,不需要移动位置不变, 结束后的顺序值:3,6,7,9,1,8
第4次插入。已排序区:3,6,7,9 未排序区 : 1,8 临时区的值 1
比较:9比1大,所以 9后移一位,
7比1大,后移一位
6比1大,后移一位
3比1大,后移一位
然后把1插入到3原来的位置。 结束后的顺序值:1,3,6,7,9,8
第5次插入。已排序区:1,3,6,7,9 未排序区 : 8 临时区的值 8 比较:9比8大,所以 8后移一位,
然后把8插入到9原来的位置。 结束后的顺序值:1,3,6,7,8,9
def insertSort(nums):#待排序区域for i in range(1,len(nums)):#临时变量temp=nums[i]print(f"临时值{temp}")#已排序的索引j=i-1#比较的次数while j>=0 and nums[j]>temp:#大于临时值,值后移print(f"{nums[j]}大于临时值{temp},后移一位")nums[j+1]=nums[j]j-=1nums[j+1]=tempprint(f"已排好的{nums[:i+1]}")print(f"未排好的{nums[i+1:]}")return numsnums=[7,6,3,9,1,8]
insertSort(nums)
print(nums)
结果: