[数据结构]常用排序算法的比较

排序法概念最坏所需时间平均所需时间稳定性所需的额外空间
直接查插入排序将一个记录插入到已排序好的有序表中,从而得到一个新的,记录数增1的有序表。 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) ✓ \checkmark O ( 1 ) O(1) O(1)
希尔排序
(又称缩小增量排序)
先将整个待排序记录序列分割成若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序时",再对全体记录进行一次直接插入排序. O ( n 2 ) O(n^2) O(n2) O ( n 1.3 ) O(n^{1.3}) O(n1.3) × \times × O ( 1 ) O(1) O(1)
冒泡排序冒泡排序也称沉底法,每相邻两个记录关键字比较大小,大的记录往下沉(也可以小的记录往上浮).每一遍把最后一个下沉的位置记下,下一遍只需检查比较到此为止;到所有记录都不发生下沉时,整个过程结束(每交换一次,记录减少一个反序数). O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) ✓ \checkmark O ( 1 ) O(1) O(1)
快速排序任取待排序序列中的某个元素作为基准,通过一趟快速排序将待排序的元素分割成左右两个子序列,其中左子序列的排序关键字均比基准值(也称枢轴)元素的关键字值小;右子序列元素的关键字均比基准元素的关键字大,基准元素得到了它在整个序列中的最终位置并被存放好,这个过程称为一趟快速排序.第二趟再分别对分割成左右两部分的子序列进行快速排序,这两部分子序列中的枢轴元素也得到了最终在序列中的位置而被存放好,并且它们又分别分割出左右独立的里昂个子序列 ⋯ \cdots O ( n 2 ) O(n^2) O(n2) O ( n log ⁡ 2 n ) O(n\log_{2}{n}) O(nlog2n) × \times × O ( log ⁡ 2 n ) O(\log_{2}{n}) O(log2n)
简单选择排序初始状态:整个数组r划分成两个部分,即有序区(初始为空)和无序区.
基本操作:从无序区中选择关键字值最小的记录,将其与无序区的第一个记录交换位置(实质是添加到有序区尾部).
从初态(有序区为空)开始,重复步骤2,直到终态(无序区为空).
O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) ✓ \checkmark O ( 1 ) O(1) O(1)
堆排序是利用堆树来进行排序的方法.堆树是一种特殊的完全二叉树,如果该完全二叉树中每一个节点的值均大于或等于它的两个子节点的值,则称为大顶堆(或大根堆);如果该完全二叉树中每一个结点的值均小于或等于它的两个子节点的值,则称其为小顶堆(或小根堆).
基本思想:(1)建堆:把用数组存储的n个待排序数据,看作成一颗完全二叉树的顺序存储形式,并对这颗完全二叉树进行一系列的比较交换,将其建成一颗堆树.
(2)交换:将堆顶数据和当前待排序序列的最后那个数据相交换,堆顶数据即可排到其最终位置,待排序数据从而减少一个.
(3)调整:由于最后那个数据交换到堆顶,它破坏了原有的堆结构,应将其不断向下交换,直到剩余的待排序数据重新调整成一颗堆树.
(4)不断重复(2)(3)两步,直到待排序数据只剩一个为止,此时所有数据即已排成有序.
O ( n log ⁡ 2 n ) O(n\log_{2}{n}) O(nlog2n) O ( n log ⁡ 2 n ) O(n\log_{2}{n}) O(nlog2n) × \times × O ( 1 ) O(1) O(1)
归并排序(1)将n个记录的待排序序列看成是由n个子长度都为1的有序子表组成.
(2)将两两相邻的子表归并为一个有序子表.
(3)重复上述步骤,直至归并为一个长度为n的有序表.
O ( n log ⁡ 2 n ) O(n\log_{2}{n}) O(nlog2n) O ( n log ⁡ 2 n ) O(n\log_{2}{n}) O(nlog2n) ✓ \checkmark O ( n ) O(n) O(n)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值