排序算法汇总

http://www.javashuo.com/article/p-hmcedzbw-r.html算法

冒泡排序(Bubble Sort)数组

  • 比较相邻的元素。若是第一个比第二个大,就交换它们两个,直到最后
  • 算法分析
    • 最佳状况:T(n) = O(n)   
      • 这里注意,若是发现没有交换,证实已是排好序了
      • 第一次比较就没有出现交换,因此是 O(n)   
    • 最差状况:T(n) = O(n2)   
    • 平均状况:T(n) = O(n2)

选择排序(Selection Sort)ui

  • 第一个分别与后面的进行比较,每次把最大(最小)的投出来
  • 算法分析
    • 最佳状况:T(n) = O(n2) 
    • 最差状况:T(n) = O(n2)  
    • 平均状况:T(n) = O(n2)

插入排序(Insertion Sort).net

  • 每次拿出一个与前面挨着的比较,发现第一个比本身大(小)的插入,前面的序列都是有序序列
  •  算法分析
    • 最佳状况:T(n) = O(n)   
      • 每次都不须要动(每次比较一次),遍历一次
    • 最坏状况:T(n) = O(n2)   
    • 平均状况:T(n) = O(n2)
      • 每次比较多少次不肯定,近似n次

希尔排序(Shell Sort)3d

  • 改进插入排序
  • “缩小增量排序”或者“递减增量排序”
  •  算法分析
    • 最佳状况:T(n) = O(nlog2 n)  
    • 最坏状况:T(n) = O(nlog2 n)  
    • 平均状况:T(n) =O(nlog2n) 
    • 时间复杂度:
      • 基于插入排序的两点性质而来:
        • 对一个“几乎”已经排好序的无序序列,插入排序的效率是很高的,能够达到线性排序的效率

归并排序(Merge Sort)blog

  • 把长度为n的输入序列分红两个长度为n/2的子序列;
  • 对这两个子序列分别采用归并排序;
  • 将两个排序好的子序列合并成一个最终的排序序列。
  • 算法分析
    • 最佳状况:T(n) = O(n)  
    • 最差状况:T(n) = O(nlogn)  
    • 平均状况:T(n) = O(nlogn)
      • 最后一轮访问是n
      • 往前推每次都是n/2
      • 取极限

快速排序(Quick Sort)排序

  • 选择中间数,把大雨的丢右边,小于的丢左边
    • 递归
  • 算法分析
    • 最佳状况:T(n) = O(nlogn)   
    • 最差状况:T(n) = O(n2)   
    • 平均状况:T(n) = O(nlogn) 

堆排序(Heap Sort)递归

  •  
  • 算法分析
    • 最佳状况:T(n) = O(nlogn)
    • 最差状况:T(n) = O(nlogn)
    • 平均状况:T(n) = O(nlogn)

计数排序(Counting Sort)内存

  • 有肯定范围的数
  • 申请最大数长度的数组
  • 算法分析
    • 当输入的元素是n 个0到k之间的整数时,它的运行时间是 O(n + k)。
      • 计数排序不是比较排序,排序的速度快于任何比较排序算法。
      • 因为用来计数的数组C的长度取决于待排序数组中数据的范围
        • 等于待排序数组的最大值与最小值的差加上1
      • 这使得计数排序对于数据范围很大的数组,须要大量时间和内存。
    • 最佳状况:T(n) = O(n+k)  
    • 最差状况:T(n) = O(n+k)  
    • 平均状况:T(n) = O(n+k)

桶排序(Bucket Sort)get

  • 桶排序是计数排序的升级版。

  • 桶排序最好状况下使用线性时间O(n),

    • 桶排序的时间复杂度,取决与对各个桶之间数据进行排序的时间复杂度,

      • 由于其它部分的时间复杂度都为O(n)。

    • 很显然,桶划分的越小,各个桶之间的数据越少,排序所用的时间也会越少。

    • 但相应的空间消耗就会增大。

  • 最佳状况:T(n) = O(n+k) 

  • 平均状况:T(n) = O(n+k)   

  • 最差状况:T(n) = O(n2) 

基数排序(Radix Sort)

  • 基数排序也是非比较的排序算法,对每一位进行排序,从最低位开始排序,复杂度为O(kn),为数组长度,k为数组中的数的最大的位数;
  • 算法分析
    • 最佳状况:T(n) = O(n * k)   
    • 最差状况:T(n) = O(n * k)   
    • 平均状况:T(n) = O(n * k)
相关文章
相关标签/搜索