关于插入排序和选择排序的比较

    写这篇文章,是笔者在看面试题的时候,复习到了排序。各种排序名称想必让大家难以记忆,因此当我在对比插入排序和选择排序差异的时候,我发现二者结构非常相似,于是想对比一下二者排序的效率。

  复杂度公式如下:


 最好情况最坏情况
选择排序比较N*(N-1)/2次,交换0次比较N*(N-1)/2次,交换N*(N-1)/2次,赋值N*(N-1)/2次
插入排序比较N-1次,交换0次比较N*(N-1)/2次,交换N*(N-1)/2次,赋值3*N*(N-1)/2次
改进插入排序比较N-1次,交换0次比较N*(N-1)/2次,交换N*(N-1)/2次,赋值N*(N-1)/2 + 2(N-1)次

那么观察该复杂度公式得出已下结论:

        从比较次数来看:序列越有序则插入排序所需比较次数越少;而选择排序比较次数恒为N*(N-1)/2次。

        从赋值情况来看:在相同比较次数下(也就是最坏情况下),选择排序比插入排序和改进插入排序赋值次数少。

因此,对于改进插入排序和选择排序的比较,不能笼统的说谁快,而是要根据具体情况的。取决于序列的有序程度。

                                                          <——(有序程度)

                                 |——————————————————|

                          改进插入排序                                            选择排序

下面附上java源码和测试情况:







测试结果:              改进插入排序(ms)               选择排序(ms)

size=10

size=100                        0                                     0

size=1000                      3                                     3

size=10000                    30                                   31

size=100000                  2706                                2626

size=1000000                276463                            265373

...对于随机序列,数据越多无序的程度越高。

对于有序序列。如从0开始,1为公差的数列

size=10000                    1                                     17

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值