2019/09/29 05-插入排序

交换排序的冒泡法
选择排序的核心
冒泡排序的核心,特点就是交换,封装解构和交换,在每一趟里面依次比较,像冒泡一样,把最大值和最小值送到某一端去,叫交换排序

选择排序,给一排数字,这一趟不做任何交换,先找最大值或者最小值,把这个值找到之后,固定到某个位置,这是选择排序的核心,在每一趟都需要找极小值或极大值

插入排序就是知道你的位置在哪里,其他的靠边放在这里插入图片描述
在未排序序列中,构建一个自排序序列,直至全部数据排序完成
将待排序的数,插入到已经排序的序列中合适的位置(未排序少一个往已经排序的里面挪动)
增加一个哨兵,放入待比较值,让它和后面已经排好序的序列比较,找到合适的插入点
(跟insert一样,插入的,后面的元素都要挪动)
在这里插入图片描述
0是哨兵,加进来的,待排序数是19856
在这里插入图片描述
当1个数是1,第一个其实已经是已排序的了,自己跟自己比,把9放到哨兵的位置
在这里插入图片描述
19就变成已经排序的了,856是待排序区,8是未排序的第一个,8放到哨兵,8和9比,9大,把9移到原来8的位置上来
在这里插入图片描述
189已排序,56未排序,第一个数字5,5和9比较,9向后挪,8和5比较,8向后挪,5和1比较,5大,5挪到1后面
变成15896

在这里插入图片描述
未排序只有6,6和9比,9向后挪,6和8比,8向后挪,6和5比较,6挪到5后面
在这里插入图片描述
哨兵放哪都行,放开头方便一点
在这里插入图片描述
哨兵位开始迭代就是 range(2,length(最后的6也要比较,少不了))
nums[0]]=nums[i]把哨兵准备好
下面是谁跟谁比较

在这里插入图片描述
比较完之后向右挪
不能走了就说明左边的数不大于你了

在这里插入图片描述
挪完之后哨兵归位
在这里插入图片描述
这就是核心算法,插入排序,就是待排序数据插入到已排序区域,已排序多出一个数据自然会向后挤,里面必须有while循环,不然就出问题了,不知道循环几次
在这里插入图片描述
从1 开始打印
在这里插入图片描述
空间复杂度是O(1),多用一个变量位置,哨兵的位置
在这里插入图片描述
加入你拿到的顺序刚好是升序的,最好情况就是里面内存循环进不去,外面一层遍历完就结束了在这里插入图片描述
这一块一定 要做这个修正
在这里插入图片描述在这里插入图片描述
直接插入排序:
最好情况,正好是升序排列,比较迭代n-1次
最差情况,降序排列,比较迭代1,2,。。。,n-1即n(n-1)/2=n2-n,时间复杂度是O(n2)
使用两层嵌套循环,时间复杂度是O(n^2)
稳定排序算法
使用在小规模数据比较
优化
如果 比较操作耗时大的话,可以采用二分查找来提高效率,即二分查找插入排序

稳定排序,稳定是三个1进行排序

在这里插入图片描述
这三个1位置不变相当于稳定排序
在这里插入图片描述
张三李四王五,李四王五个子低都是1.7,张三是1.75,按照升序排,李四王五的按照插入排序,他们的相对位置是不动的,李四永远在王五的左边,这种排序算法叫稳定排序算法
面试问稳定的排序算法,就是插入排序
但是选择排序和冒泡排序保证不了

效率不是太高
在这里插入图片描述
在这里插入图片描述
如果后面有1,它需要一次次往前比较过去,很浪费时间
在这里插入图片描述
其实可以用折半,二分的方式比较,分成一般,小的往前,大的往后比较
前提是已经排序的二分
在这里插入图片描述
指的是在有序区二分查找,只是解决查询的问题,这个算法就是插入数据,要挪动很多数据,所以不适合大规模数据
在这里插入图片描述
插入排序属于三大基本排序算法之一,面试必问
在这里插入图片描述
会问你插入排序是否能优化,在有序区查询位置的时候可以用二分思想来做
但是规模大了,效率一点不搞,因为插入排序的重点在于插入数据,使用有序的序列,在插入的时候带来的挪动,挪动会带来很大的效率问题,所以效率不太高
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值