昨天写了超长篇幅的排序算法比较以及执行流程,晚上Firefox崩了,Markdown还没有自动保存,白写了。最近挺忙,就不在写了,放上个算法性能比较吧。
快速排序,归并排序,堆排序是重点
桶排序
桶排序是最快的排序,时间复杂度只有O(n),但是它的使用是有条件的,就是待排序的数必须是自然数,且这些数还没有重复,对输入要求比较高啊,不过一旦你知道你的输入是什么形式的话用桶排可以节省一些时间。要求空间复杂度也最高!
下面是大致排序思路:
准备10个空桶,最大数个空桶
[6 2 4 1 5 9] 待排数组
[0 0 0 0 0 0 0 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
1)顺序从待排数组中取出数字,首先6被取出,然后把6入6号桶,这个过程类似这样:空桶[ 待排数组[ 0 ] ] = 待排数组[ 0 ]
[6 2 4 1 5 9] 待排数组
[0 0 0 0 0 0 6 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
2)顺序从待排数组中取出下一个数字,此时2被取出,将其放入2号桶,是几就放几号桶
[6 2 4 1 5 9] 待排数组
[0 0 2 0 0 0 6 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
3,4,5,6省略,过程一样,全部入桶后变成下边这样
[6 2 4 1 5 9] 待排数组
[0 1 2 0 4 5 6 0 0 9] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)