手写三种sort算法
来源:互联网 发布:数据恢复精灵 4.2.1 编辑:程序博客网 时间:2024/05/17 04:22
最近要找工作,于是手写了stl风格的三种sort算法,quick sort,merge sort和heap sort,其中quick sort分别实现了递归和非递归两种,代码如下,经过了基本的正确性测试(不保证对所有类型都正确,因为没充分测试过),然后性能测试与C++的std::sort和std::stable_sort做了一些对比代码如下:
进行了基本的测试之后与stl的std::sort,std::stable_sort进行了测试对比
测试随机生成5000w数据,分别使用std::sort,std::stable_sort,以及自己实现的merge sort,heap sort,quick sort(递归与非递归的)进行了
对比编译使用g++ -O3优化,
运行的平台为:Linux 2.6.26-2-686-bigmem 16 Intel Unknown 2666MHz processors, 85340.50 total bogomips, 16223M
RAM System library 2.7.0
stable_sort time: 7.968942s
merge_sort_recursion time: 8.704957s
heap_sort time: 19.695442s
quick_sort_recursion time: 6.323566s
quick_sort_nonerecu time: 6.283994s
sort time: 5.778701s
可以看到heap sort最慢(可能是由于我实现的原因quick sort最快
stl的std::sort采用一种混合排序的策略,优化的比较好,因此比我实现的quick快一些还可以看到其实递归与非递归其实差别不大,
quick_sort_recursion和quick_sort_nonerecu在5kw数据下,相差还不到0.1s,因此谨慎怀疑glibc里面的qsort用栈展开是否有必要。
看了一下stl的std::stable_sort,貌似它用merge sort实现的时候,实现比我的方法好一些,因此运行速度也比我的merge sort快了接近1s。
- 手写三种sort算法
- 【复习笔记】手写三种O(n^2)的基础排序算法
- KNN算法-手写识别
- 常见面试手写算法
- 手写快速排序——sort
- sort算法
- sort算法
- Sort算法
- 三种sort方法及比较
- C# List Sort的三种方法
- KNN算法 手写识别 python
- KMeans算法-手写数字图像识别
- LRU算法 c++手写 map
- 几种sort算法的Java实现
- Sort List(四种算法)
- 常见的几种Sort排序算法
- 漫谈WinCE的手写识别技术(三)
- koa学习笔记三---手写thunkify模块
- oracle sql 时间查询
- POI操作excel大全
- SVN版本控制器的安装和配置
- 代码注释
- eclipse3.2中serialVersionUID的作用
- 手写三种sort算法
- Axis2开发webservice总结
- Eclipse下安装配置SVN
- VB动态添加执行代码完整版(三)
- HTML5中的服务器‘推送’技术 -WebSocket
- HTML5中的服务器‘推送’技术 -Server-Sent Events
- ~~~~
- POJ 2389 : 大数相乘
- MySQL全文搜索