三种排序算法的效率比较(图)

最近一个项目牵涉到大量数据的排序和查找。虽然我们知道了几种常用算法,但是他们的效率究竟怎么样,适合什么样的情况也没有见到说明文档。

下面我就来比较一下下面三种算法(用ArrayList.Sort()作为比较对象):

 

说明一下:1.该程序主要正对于无序数组,字符以及其他排序并不适合

2.要求数组中的元素全为自然数,非自然数的情况并未测试

3.数组元素个数指的是:该数组中的项数

4.范围值的是该数组中生成随机元素时元素的范围,为了简单我们默认为1-

5.左边的时间是我们算法的时间,右边的时间是ArrayList的排序时间。

 

好了,先来看看计数排序的方式:

计数排序:

1.元素个数很多,跨度很小

 

2.元素个数很少,跨度很大

 

3.元素个数与元素跨度相对集中

 

由此可以看出:

1.当元素个数很多而且元素的跨度并不是很大的时候,用计算排序效率是很高的。

2.相反,元素个数很少,跨度很大时,它的效率就很差了

3.当元素个数和元素跨度在一个相对集中的情况下,两种排序方式效率差不多(ArrayList稍快)。

 

接下来我们看看冒泡排序:

1.元素个数很多,跨度很小

 

2.元素个数很少,跨度很大

 

3. 元素个数与元素跨度相对集中

 

冒泡法总结:

1.在元素很多的时候,我们发现冒泡排序还是存在一定优势的,但是与计数排序相比效率还是差了很多了。

2.元素个数很少,跨度很大,这总方式冒泡最在行了,效率还是很不错的。

3. 元素个数与元素跨度相对集中,在这种情况下,冒泡排序的效率比ArrayList效率还是要高点。

3.插入排序

1.元素个数很多,跨度很小

 

2.元素个数很少,跨度很大

 

3. 元素个数与元素跨度相对集中

 

插入排序总结:

1.在元素很多的时候,插入排序的方式需要移动很多次数组中的值,效率就相对很低了。

2.元素个数很少,跨度很大。这两种算法的效率都很快。

3. 元素个数与元素跨度相对集中,在这种情况下,插入排序的优势就体现出来了。

总结:以上的测试基于随机数组,数组不具有任何可以观察的特点,测试数据满足一般情况,但是在有的特定数组中,我们应该关注数组的特殊性,通过数组的特性来选择相应的排序算法,最终实现高效率的排序。

根据以上的测试结果,我个人觉得ArrayListSort的排序方法是一个值得相信的通用排序方案,在不是很追求效率的情况下,采用系统的排序方法是可行的。

 

 

下面来看看一个折半查找算法

 

 

 

系统的查找方法和折半查找的方法效率几乎一样,我都在猜想他们系统是不是采用的折半查找方法了。由于其他原因我也不想去找了,有知道的朋友可以告诉我,谢谢了。

哈希查找由于不适合我做的项目,所以我也就没有去测试了。

 

我的联系方式:QQ125941562Emailbobui@163.com

有什么问题欢迎大家一起讨论交流。

文档地址 http://download.csdn.net/source/1819765

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值