常用排序算法思想总结

1、冒泡排序
通过与相邻元素的比较和交换来把小的数交换到最前面。这个过程类似于水泡上升一样,因此得名。
冒泡排序的时间复杂度为O(n^2)。

2、(简单)选择排序
第一次遍历“选择”出所有元素中最小的元素,第二次遍历“选择”出剩下元素中最小的元素,依此类推。选择排序得名于这个“选择”过程。
选择排序的时间复杂度为O(n^2)。

3、插入排序
插入排序的过程与抓牌(扑克牌)的过程一致。
抓第一张牌时,牌便在正确的位置;抓第二张牌,将牌跟第一张牌比较,找到正确位置插入;抓到第三张牌时,将牌跟前面的两张牌比较,找到正确位置插入,依此类推。插入排序得名于这个“插入”过程。
选择排序的时间复杂度为O(n^2)。

4、快速排序
快速排序的思路是,选中第一个元素作为比较的基准,再使用两个指针分别指向序列的第一个和最后一个元素(暂叫左右指针),先从右指针开始,依次减一,将右指针指向的元素和基准值进行比较,当找到小于基准值的元素时,两者进行交换;接着左指针依次加一,将指针所指元素和基准值进行比较,当找到大于基准值的元素时,两者进行交换,随后再将右指针依次减一,左指针依次加一,不断重复前面的过程,依此类推,直到左右指针相逢,结束整个操作过程。经过操作后,会将序列分成两部分,基准元素前面的元素都小于基准元素的值,基准元素后面的元素都大于基准元素的值。接着使用递归对前后两部分采用前面相同的逻辑进行处理,最终完成整个排序过程。
快速排序使用的排序思想是:冒泡+二分+递归分治。
快速排序的时间复杂度为O(nlgn)。应该得名于此吧。

5、希尔排序
先将整个待排序序列分割成为若干子序列分别进行直接插入排序,待整个序列基本有序时再对全体记录进行一次直接插入排序。所以希尔排序是插入排序的一种高效率的实现,也叫缩小增量排序。
希尔排序的时间复杂度为O(n^1.3)。

6、归并排序
归并排序的基本思想是:先两两合并排序,再四四合并排序,依次类推。
本质思想是递归分治的思想。
归并排序的时间复杂度为O(nlgn)。
归并排序的空间复杂度为O(n)。

7、计数排序
当待排序的数是满足一定范围的整数,而且可以提供比较多的辅助空间时,可以考虑计数排序。
其思想是,用待排序的数作为数组的下标,统计每个数字的个数,然后依次输出即可得到有序序列。
计数排序的时间复杂度为O(n)。

8、堆排序
堆排序的核心思想是构建堆(大根堆/小根堆),删除堆顶,重新调整堆,再删除堆顶,依此类推,得到排序序列。
推排序的重要意义在于最快的找到最大最小值。因此,在实践中,堆的用途不在排序,而是调度算法,比如优先级调度。
堆排序的平均时间复杂度为O(n*logn)。

9、桶排序
桶排序是计数排序的变种,把计数排序中相邻的m个”小桶”放到一个”大桶”中,在分完桶后,对每个桶进行排序(一般用快排),然后合并成最后的结果。
桶排序的平均时间复杂度为线性的O(n+c),其中c为桶内快排的时间复杂度。

10、基数排序
将待排数据中的每组关键字依次进行桶分配。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值