排序算法实践

那天阅读《代码之美》这本书的章节,写个程序试试其中的排序算法的例子,运行成功后,突然想试试和VC9自带的 STL sort函数比较一下,测试结果出乎我所料,这个例子比STL 的sort函数一般快上3~4倍之多,觉得很是奇怪,检查了一下,发现应该是debug版的原因,切换到release版再测,对于小数据STL 的sort要快很多,但是碰到大数据量(千万级别的数据)的时候,这个例子有的时候反到要快不少。难道真的如《程序设计实践》里所说的那样“STL作为C++ 的一个新部分,仍然受到不成熟实现的损害。。。”对于VC STL我以前做文件夹同步功能的时候过一些研究,我当时用的是VC6,不像SGI STL sort为保证其最差速度是也是logn而采用的是混合排序法(快速排序,插入排序,堆排序),它的sort函数用的就是快速排序算法。照理说应该和这里例子函数速度差不多。带着疑问,我打开<<algorithm>文件中查看其中的的sort函数代码,结果发现VC9也已经与时俱进,其中sort函数用的也是如同SGI STL一样的混合排序法,当分割数据次数过多的时候(allow 1.5 log2(N) divisions),使用堆排序或者插入排序算法。这样的话能够避免最差速度为n*n,但是鱼和熊掌不可兼得,一般情况下肯定会影响到排序速度(快速排序算法一般会比堆排序或者插入排序算法要快)。就向候捷曾经说过的”源码之前,了无秘密“。以下附上例子代码以及vc9sort代码。

 

例子代码:

 

vc9sort代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值