各种排序方法及比较

内部排序:数据在内存内排序

外部排序:极为庞大得数据,内存里不能全部容纳,排序时需要访问外存

排序的稳定性:大小相同的元素排序前后顺序不发生改变

1.冒泡法

  小的元素或大的元素往后调,属于稳定排序

  改进:1.加flag,若某趟无交换说明已排好,直接return

     2.加postion,记录之前已有序的位置

     3.从两边冒泡

2.快速排序法

  通常是第一选择

  有序时会退变为冒泡排序

  已某个元素为中间值,选两个哨兵,从两边读数,小于中间值放左边,大于放右边。迭代进行

  改进:1.取头尾中间三值,以大小居中作为中间值

     2.当子序列规模较小时用直接插入排序

  不稳定排序

3.选择排序法

  选最小的与第一个交换,再选第二小的与第二个交换,再.......

  改进:二元选择排序,每次排最小和最大的放到两边

  不稳定排序

4.堆排序

  对选择排序的改进

  小顶堆:根结点比左右子树小

  大顶堆:根结点比左右子树大

  不停取出堆顶元素

  分两步:建立小顶堆:从最下面的非叶结点开始,逐渐往上(下面的结点仍需处理)

      调整堆:去除堆顶,将堆底元素置换到堆顶再调整堆

  不稳定排序

5.插入排序

  一个一个得添加元素并排序,稳定排序。时间复杂度O(n)

  还可以二分插入排序(感觉没什么软用)

6.希尔排序

  设有123456789,先排15,26,37,48,9,再排1357,2468,9,最后排123456789(这只是特例),希尔排序里有直接插入排序

  不稳定排序

7.基数排序

  由桶排序衍生而来

  稳定排序

8.归并排序

  用辅助数组来进行分段后的排序,即有序组A,B,依次放入C

  稳定排序

当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。

原文地址:https://www.cnblogs.com/psymacome/p/7987229.html