3年半前,我做了排序算法的实验,对比的算法有如下:
1)heapsort 堆排序
2)mergeSort归并排序
3)quickSort快速排序
4)lib sort 库中的排序方法,改进的快速排序
采用的数据是int数值,记录时间为秒
记录如下:
1)对于数据量很小的时候(100个元素时)
heapsort : 0.000020
mergeSort : 0.000198
quickSort : 0.000065
lib sort: 0.000057
可以看出堆排序性能最好,归并排序性能最差。
大约200个元素的时候快速排序和堆排序性能差不多,为最好。
大约500个元素的时候堆排序跟归并排序快,但还是慢于快速排序
数据量越来越大的时候,堆排序的性能就差下来
分析可能原因:
由于cpu cache的原因,小数据量的时候一般都在cache中,所以小数据量对于堆的性能是非常高的;
数据量越大,这种情况就发生变化了,大部分数据都不是在cache中,由于访问堆不是顺序访问数值元素的,
存在从树根到树叶的跨越或者倒过来,这样容易导致cache不命中。
2)数据量为2000万
heapsort2:15
mergeSort:6
quickSort:4
lib sort:3