排序算法

排序

排序时按关键字的非递减或非递增顺序对一组记录重新进行排列。(内部排序)

稳定性

  • 稳定:假设R[i] == R[j],i < j,即在原序列中R[i]在R[j]前面。排序后,R[i]仍在R[j]前面;
  • 不稳定:假设R[i] == R[j],i < j,即在原序列中R[i]在R[j]前面。排序后,R[i]在R[j]后面。

稳定的排序方法和不稳定的排序方法的排序结果不同,但是不能说不稳定的排序方法不好,各有各的适用场合。

分类

  • 插入类:每一趟排序将一个待排序的元素,按其关键字大小插入到已经排序好的一组元素的适当位置(先后移再插入)。比如直接插入排序、折半插入排序、希尔排序;
  • 交换类:不断地交换无序的序列中元素获得最大或最小元素,然后加入到有序子序列。比如冒泡排序、双向冒泡排序、快速排序
  • 选择类:从无序的序列中选出最小或最大的,直接加入到有序的序列中。比如简单选择排序、树形选择排序、堆排序
  • 归并类:归并两个或两个以上有序子序列。比如二路归并排序
  • 分配类:不需要进行关键字之间比较的排序方法,排序时主要利用分配和收集两种基本操作完成。比如分配类排序方法。

算法效率

考虑执行时间,大多不考虑辅助空间。
执行时间:主要消耗在比较和移动,可以认为高效的排序算法的比较次数和移动次数都少。

算法稳定性

稳定算法:直接插入排序,冒泡排序,二路归并排序
不稳定算法:

  • 快速排序:在左右指针交换进行填坑时有可能出现不稳定情况
  • 简单选择排序:在选出最小元素后,与无序序列中第一个元素进行交换,构建有序序列时有可能出现不稳定情况
  • 堆排序:调整堆时有可能出现不稳定情况
posted @ 2019-11-28 19:43  肥斯大只仔  阅读(178)  评论(0编辑  收藏  举报