形象下九个简单算法

    以下并不一一详解个个算法,主要是前天看了下九个基本算法,一时之间有点记忆不住,可能看了某某算法后不能联想骑具体为哪个算法。但他们并不复杂,只是一次九个,难免会思想会混杂。

   所以,本文章主要以图片为简介(没看过这些算法的不介意用这个去学,毕竟没详细介绍),让人(主要是我自己看的)一看就能联想起个个算法具体思路。这些算法都不难,相信有思路,那么按照思路就能写出代码,只是熟悉的写的快点,漂亮整洁点,不熟悉的写得慢点。

上图:

   

 

待续。。。。

 

 

     知道具体思路怎样也没用,重要在实际应用,那就得看它们的效率问题了。

     引用http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html的分析,如下

    

      性能分析和总结

     先不分析复杂度为Ο(n)的算法,因为速度太快,而且有些条件限制,我们先分析前六种算法,即:冒泡,直接插入,二分插入,直接选择,快速排序和改进型快速排序。

我的分析过程并不复杂,尝试产生一个随机数数组,数值范围是0到7FFF,这正好可以用C++的随机函数rand()产生随机数来填充数组,然后尝试不同长度的数组,同一种长度的数组尝试10次,以此得出平均值,避免过多波动,最后用Excel对结果进行分析,OK,上图了。

      最差的一眼就看出来了,是冒泡,直接插入和直接选择旗鼓相当,但我更偏向于使用直接选择,因为思路简单,需要移动的元素相对较少,况且速度还稍微快一点呢,从图中看,二分插入的速度比直接插入有了较大的提升,但代码稍微长了一点点。

     令人感到比较意外的是快速排序,3万点以内的快速排序所消耗的时间几乎可以忽略不计,速度之快,令人振奋,而改进型快速排序的线跟快速排序重合,因此不画出来。看来要对快速排序进行单独分析,我加大了数组元素的数目,从5万到150万,画出下图:

    

     可以看到,即便到了150万点,两种快速排序也仅需差不多半秒钟就完成了,实在快,改进型快速排序性能确实有微略提高,但并不明显,从图中也能看出来,是不是我设置的最小快速排序元素数目不太合适?但我尝试了好几个值都相差无几。

最后看线性复杂度的排序,速度非常惊人,我从40万测试到1200万,结果如图:

 

 

    

     可见稍微调整下算法,速度可以得到质的飞升,而不是我们以前所认为的那样:再快也不会比冒泡法快多少啊?

我最后制作一张表,比较一下这些排序法:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值