浅谈排序算法的效率(一)—(Java随笔)

排序算法有很多种,每一种都有其优缺点,可以适应不同的场合。排序算法的好坏,主要是看排序效率,排序效率的一个重要指标就是速度,速度是影响排序算法的最主要因素。

一般来说,判断一个算法的优劣,可以从以下两个方面进行:

  1. 算法的复杂度:以O表示,往往从最差,平均,最好三种情况来评价。
  2. 系统资源的占用:主要是内存和其他资源的占用,一个好的算法应该占用少的内存资源。

常用排序算法——计算复杂度比较:

  • 冒泡排序法:平均算法速度O(n^2),最坏情况下的算法速度O(n^2)
  • 快速排序法:平均算法速度O(nlogn),最坏情况下的算法速度O(n^2)
  • 选择排序法:平均算法速度O(n^2),最坏情况下的算法速度O(n^2)
  • 堆排序法:平均算法速度O(nlogn),最坏情况下的算法速度O(nlogn)
  • 插入排序法:平均算法速度O(n^2),最坏情况下的算法速度O(n^2)
  • shell排序法:平均算法速度O(n^(3/2)),最坏情况下的算法速度O(n^2)
  • 合并排序法:平均算法速度O(nlogn),最坏情况下的算法速度O(nlogn)

常用排序算法——占用系统资源比较:

  • 以上的排序算法中,大部分都只需要1个元素的存储单元(用于交换数据)。
  • 而合并排序算法需要与原始序列一样长的n个元素的存储单元(用于保存多遍合并操作)。
  • 因此合并排序算法的占用系统资源大。

其实,没有某一种算法是绝对好的,不同的算法有其各自的优劣,算法的选择需要结合实际的情况。

  • 当数据量n较小时,可以采用插入排序法或选择排序法。
  • 当数据量n较大时,则应该采用快速排序法或合并排序法等计算复杂度为O(nlogn)的算法。
  • 如果需要排序的数据是随机分布的(没有规律),则采用快速排序法的平均算法时间最短。

总结:合适的算法一定是根据实际问题的需要来选择,这样才能达到更高的算法执行效率。

下一篇:浅谈排序算法的效率(二)—(Java随笔)

你可能感兴趣的:(排序算法)