冒泡排序、插入排序、选择排序

什么是排序?

这个就不说了

如何评价排序?

我们规定下定义一个排序算法好坏的维度。

1.执行效率

这里对于效率的概念可以分为两部分,一部分是执行时间,另一部分就是比较和交换的次数(也可以归结到时间里去)。

时间其实就是时间复杂度,很好理解,就是时间复杂度越小的算法,我们认为越好。

 

比较和交换的次数我们后续会引入一个概念叫做有序度逆序度

这个有序度逆序度是一个对的概念。每次只比较一对数字。有序即左小右大,逆序即左大右小。

还有一个满有序度(即完全排好的),可想而知满有序度 = n*(n-1)/2 = 有序度+逆虚度

 

2.内存消耗

消耗内存空间的大小其实就是空间复杂度的概念,这里引入一个概念叫原地排序(我不动),简单来说就是空间复杂度O(1)的排序算法。

 

 

3.是否稳定

是否稳定的意思就是,比如说我两个相同的数字还要不要换位置。我们把不需要换位置的算法称为稳定算法,需要换的算法称为不稳定算法

 

冒泡排序

冒泡排序每次只涉及相邻的2个元素,两个元素互排,然后一路向上,直到上面比你大为止。然后每个元素执行相同的操作。

 

最好时间复杂度O(n),最坏时间复杂度O(n2)(我比较完你比较),平均时间复杂度O(n2)。

空间复杂度O(1),原地排序算法,因为每次只涉及两个元素的交换操作。

是稳定排序算法,遇到相同不交换。

 

总结下,冒泡排序就是一个交换的算法。

 

插入排序

插队排序引入了一个方法,就是将数据集分为已排序区间未排序区间。然后从未排序区间依次取元素差到已排序区间中。对于相同的元素,插到已经存在于已排序区间元素的后面

插入排序涉及插入移动

 

最好的时间复杂度O(n),最坏的时间复杂度O(n2),平均时间复杂度O(n2)。

空间复杂度O(1),原地排序算法。

稳定排序算法,遇到不交换。

 

选择排序

选择排序其实是插入排序的另一个版本。同插入排序一样,也有已排序区间未排序区间。但是从未排序区间的取数方式不是按次了,而是按最小值。对于相同的元素,插到已经存在于已排序区间元素的前面。

同插入排序一致,选择排序涉及插入移动

 

最好的时间复杂度是O(n2),最坏的时间复杂度O(n2),平均时间复杂度O(n2)。

空间复杂度O(1),原地排序算法。

不稳定排序算法。

 

补充

冒泡排序和插入排序的交换次数等于原数据的逆序度

插入排序的升级版本,希尔排序

 

 

参考

排序算法的稳定性及其意义:https://blog.csdn.net/u012501054/article/details/79342580

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值