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) 稳定排序算法 使用在小规模数据比较