选择排序和插入排序的区别

选择排序:

我们规定数组的最后位置为已经排好序的区间,那么前面的区间就是乱序的区间。

初始时排好序的区间为空,我们从乱序的区间中找到一个极大(或极小)的元素,把它放到排好序的区间中去,那么排好序的区间的长度加一,乱序的区间的长度减一,循环执行上述过程直到乱序的区间内没有元素了。

不难分析,如果没有进行过优化,该算法的时间复杂度为O(n^2)。

插入排序:

我们规定数组的最前面为已经排好序的区间,那么后面的区间就是乱序的区间。

我们从数组零位置开始遍历每个数,对于当前遍历的数,我们从已经排序好的区间的最后位置依次往前遍历所有的数直到找到它应该待的位置,插入。重复执行这样的操作,直到乱序的区间没有元素了。

这个算法的时间复杂度最坏的情况为O(n^2),但是有最好的情况,下面我们就会讲到。

区别:

区别一:

选择排序的时间复杂度是定死的,就是O(n^2),与数据的输入状态无关。因为对于选择排序,当我们从乱序的区间中找极值时,总是一味的去遍历这个乱序的区间,直到乱序的区间遍历完成后,我们才能确定极值。

插入排序的时间复杂度与数据的输入有关,当初始时给你的数据就是有序的,那么这种状态就是插入排序最好的情况,时间复杂度为O(n),因为对于当前要插入的数x1来说,我们在从后往前遍历乱序区间时,只要找到了x1应该待的位置,就不用在遍历乱序区间中剩下的元素了,那么对于这种最好的情况,我们每次进行乱序区间遍历操作的时间复杂度就会是O(1),一共进行n次乱序区间的遍历操作,总的时间复杂度为O(n)。

从另一个方面来看,我们认为插入排序比选择排序更加聪明,因为插入排序不会做多余的工作,而选择排序会把所有的工作都做完。

区别二:

选择排序是脱机的排序算法,何为脱机算法,就是必须一次性把数据全部给你后,你这个算法才能够执行,而对于选择排序来说,就是脱机的,必须把所有的数据全部给你后,你才能进行选择排序。

插入排序是在线的排序算法,何为在线算法,就是不用一次性把所有数据都给你,你这个算法即使只有一个数据,它也能够进行,当你这个算法在进行过程中,可以在添加数据进来,不会影响算法的执行效果,而插入排序就是一个这样的在线排序算法。

你可以想象一下我们平时玩的扑克牌游戏,当你从牌堆中拿出一张牌放到自己的手中去,再对这张牌进行插入位置选择时不正好就是插入排序吗。你手中拿的牌就相当于是那个有序的区间,而牌堆中的牌就相当于是无序的区间,每当你从牌堆中拿牌时,不也就想当于新进来一个数吗。

  • 24
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值