排序算法之直接插入排序

1.1直接插入排序原理

在末排序序列中,构建一个子排序序列,直至全部数据排序完成
将待排序的数,插入到已经排序的序列中合适的位置
增加一个哨兵,放入待比较值,让它和后面已经排序好序的序列比较,找到合适的插入点
在原始的列表前添加一个元素(作为哨兵,比较值)1作为有序数列开始比较;哨兵9和1比较,1小,哨兵插入,本轮结束
0 -->1 9 8 5 6 7 4 3 2
9 -->1 9 8 5 6 7 4 3 2
把8放到哨兵位置,有序序列为1,9;哨兵8小于9,9右移,哨兵8大于1,哨兵8插入,本轮结束
8-->1 9 8 5 6 7 4 3 2

1.2代码实现

#插入排序
nums = [1,9,8,5,6,7,4,3,2]
nums = [0] + nums
_,*origin = nums
length = len(nums)
for i in range(2,length):
    nums[0] = nums[i]
    j = i -1
    if nums[0]<nums[j]:
        while nums[0]<nums[j]:
            nums[j+1] = nums[j]
            j -=1
        nums[j+1] = nums[0]
_,*new_nums = nums
print(new_nums)

1.3总结

最好情况,正好是升序排列,比较迭代n-1
最差情况,正好是降序排列,比较迭代1,2,3,4,5,n-1即n(n-1)/2
使用2层嵌套循环,时间复杂度0(n**2)
稳定排序算法
使用在小规模数据比较

  

posted @ 2018-04-11 20:48  亚洲哈登  阅读(125)  评论(0编辑  收藏  举报