赞
踩
写这篇文章,是笔者在看面试题的时候,复习到了排序。各种排序名称想必让大家难以记忆,因此当我在对比插入排序和选择排序差异的时候,我发现二者结构非常相似,于是想对比一下二者排序的效率。
复杂度公式如下:
最好情况 | 最坏情况 | |
选择排序 | 比较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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。