排序算法实践

来源:互联网 发布:周秀云 知乎 编辑:程序博客网 时间:2024/05/03 14:16

那天阅读《代码之美》这本书的章节,写个程序试试其中的排序算法的例子,运行成功后,突然想试试和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代码: