排序算法总结

常用排序算法各项特征

这里写图片描述

冒泡排序:

冒泡是最简单的排序算法,第一次见是在谭浩强先生的C语言书里面。思想就是遍历数组,相邻数作比较,不满足所需的大小关系就交换位置。
优点是稳定,算法思想简单。
缺点是效率低。

插入排序

这也是非常简单的一种算法,先维护一个顺序数组,然后把新加入的数加入数组合适的位置。
优缺点同上。

选择排序

每次从数组中选最大的数作为起始位置。这种算法不常用。
缺点比上面多了一个不稳定。

快速排序

这应该是最喜欢用来考试的算法了,冒泡的改进。思想是分而治之(学围棋时学的词),平均复杂度是O(nlogn),很多库中排序函数都是基于快排的。
算法设定一个基准,然后把原数组按照基准分成两块(和基准数交换位置),左小右大。接着递归,直到分块大小小于等于1。
优点快。
缺点不稳定,额外空间保存递归时的局部变量。如果原数组有序,则复杂度O(n^2)。

希尔排序

插入算法的改进,将全部数分成n个区域,所有相隔n距离的数分成一个小组进行排序(插入),实现局部有序。把n减小,重复上述步骤。最终n=1时,结束排序,全局有序。
优点较快。
缺点不稳定。

堆排序

很关键的一种算法,常用于解决TOP-K问题(大顶堆k-min,小顶堆k-max),主要利用了完全二叉树的结构性质(也可以一维数组实现)。
优点快。
缺点不稳定,不稳定发生在于堆顶元素交换的时候。

归并排序

同样使用分而治之的思想。依赖merge操作,将两个有序的数组合并为一个有序数组,递归调用。归并排序还可以求数组的单调和一级逆序对。
优点快,稳定。
缺点占用大量空间。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值