Java排序算法(十二):总结

 Java排序算法(十二):总结

前面讲了10种基本的排序算法,现在来作下总结,基于下面几个方面来比较各个排序算法的优劣:

时间复杂度,空间复杂度,稳定性,适用场景

排序算法 时间复杂度 空间复杂度 稳定性 适用场景
直接选择排序 O(n^2) O(1) 不稳定 时间效率不高,但是空间效率很高,算法实现比较简单
堆排序 O(nlogn),底数为2 O(1) 不稳定 时间效率很高,但是不稳定
冒泡排序 O(n^2) O(1) 稳定 算法实现比较简单,稳定,且对于已基本排序的数据排序,时间复杂度为O(n)
快速排序 最好O(nlogn),底数为2
最坏O(n^2)
平均O(nlogn),底数为2
O(logn),底数为2 不稳定 时间效率很高,但是不稳定
直接插入排序 O(n^2) O(1) 稳定  
折半插入排序 O(n^2) O(1) 稳定 时间效率比直接插入排序要好
希尔排序 O(n(logn)^2),底数为2 O(1) 不稳定  
归并排序 O(nlogn),底数为2 O(n) 稳定 空间复杂度较高
桶式排序 O(k+n) O(k+n) 稳定 待排序数据的范围在0~k之间,只能为整形序列
基数排序     稳定 依赖子关键字排序算法,子关键字排序算法必须是稳定的

 

关于稳定性的更深入分析,可以参考:

http://blog.sina.com.cn/s/blog_5f91efbe0100ndjb.html

你可能感兴趣的:(java,算法)