排序算法概述

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序算法从来不会如此。

排序大概分为四类:  

     交换排序:包括冒泡排序,快速排序。

     选择排序:包括直接选择排序,堆排序。

     插入排序:包括直接插入排序,希尔排序。

     合并排序:合并排序。

评估排序算法的三大因素:

l        稳定度:稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。也就是一个排序算法是稳定的,就是当有两个有相等关键的纪录RS,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。

l        计算的复杂度(最差、平均、和最好性能),依据列表(list)的大小(n)。一般而言,好的性能是O(n log n),且坏的性能是O(n2)。对于一个排序理想的性能是O(n)。仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要O(n logn)

l        内存使用量(以及其他电脑资源的使用)

 

稳定度分类:

       稳定的:

             冒泡排序(bubble sort)— O(n2)

             插入排序(insertion sort)— O(n2)

             合并排序(merge sort)— O(n log n); 需要 O(n) 额外空间

      不稳定:

             选择排序(selection sort)— O(n2)

             希尔排序(shell sort)— O(n log n) 如果使用最佳的现在版本

             堆排序(heapsort)— O(n log n)

             快速排序(quicksort)— O(n log n) 期望时间, O(n2) 最坏情况;

对于大的、乱数列表一般相信是最快的已知排序

      

       平均时间复杂度由高到低为:

             冒泡排序 O(n2)

             插入排序 O(n2)

             选择排序 O(n2)

             归并排序 O(n log n)

             堆排序 O(n log n)

             快速排序 O(n log n)

             希尔排序 O(n1.25)

             基数排序 O(n)

      说明:虽然完全逆续的情况下,快速排序会降到选择排序的速度,不过从概率角度来说(参考信息学理论,和概率学),不对算法做编程上优化时,快速排序的平均速度比堆排序要快一些。

       实际测试结果(摘维基百科)

          排序算法概述_第1张图片

你可能感兴趣的:(编程,算法,优化,shell,merge,n2)