一、主要分析以下几种排序算法
归并排序,插入排序 ,希尔排序,快速排序,冒泡排序,桶排序。
不同的样本空间各种排序花费时间如图一所示:
图一
二、算法性能分析
- 归并排序法- O(n lg n); 稳定,要求O(n) 额外记忆
- 插入排序- 稳定,算法复杂度为O(n2)
- 希尔排序 不稳定,复杂度为O(nlogn)
- 快速排序 – 不稳定 O(n 日志 n) 期望时间, O(n2) 最坏的案件
- 冒泡排序 稳定,复杂度为O(n2)
- 桶排序- 稳定,要求O(n) 额外记忆O(n);
程序经过5次运行后求平均值,如图二所示:
图二
从图中可以看出在样本空间很大时快排和希尔排序有很高的效率,因为他们的复杂度为nlogn,在样本空间很大时就体现出了优势,但是不稳定。
就从冒泡排序的结果看,可以知道当样本空间很小的时候,运算速度很快,随着n增大,其运算时间明显增长。但是算法稳定。
三、总结
所以在选择排序的时候要根据样本空间的大小和需求来选择算法。需求也就是对排序结果稳定性的要求。如果要求稳定、样本空间很小,冒泡、插入排序还是很好的选择。
四、附录
排序代码如下: