十大排序算法及其时间、空间复杂度学习 [Python实现]

  1. Introduction

    1. Language: Python

    2. 代码仓库:https://github.com/IamHehe/TrySort

    3. 数组题很多情况就是结合排序进行的,比如merge sort,quick sort等,所以要学好排序,并且掌握如何分析最好和最坏的情况下的时间空间复杂度是如何推导的。
      Github截图

  2. Discussion

    1. 快速排序是冒泡排序的优化。冒泡是从左往右的交换,快排是直接获取中间值pivot进行交换,同时,以pivot为界限划分左右两个部分,
      分别再次放入快排函数中进行递归操作,时间复杂度O(n)降低至o(log n)。
    2. 希尔排序是插入排序的优化。插入排序是一个一个的比较,希尔排序是先按照一定的步长(gap)将数组划分,使用插入排序对同一个gap中的数进行操作,然后减小步长(如gap//=2),重复操作,最后,gap为1,可以看做对整个数组进行插入排序,但是由于这时的列表已经经过前面的排序操作,使得数组中小范围内的数大小分布较为均匀,只需要进行小规模交换,因此可以大大减少平均的对比次数。
    3. 堆排序是选择排序的优化。选择排序相当于每次选择一个最大(小)的数放到队尾(头),每次选择最值都是从左到右比较一遍堆排序使用堆的思想,每次原地建堆,返回堆顶,即为返回最值,时间复杂度O(n)降低至o(log n)。大顶堆和小顶堆分别对应升序和降序排序。
    4. 归并排序是典型的分治算法,但是相比后续的快速排序这种通过index原地建堆的算法,略显逊色。
    5. 计数排序、桶排序、基数排序三种利用额外空间记录数组的方式,提高了效率,但是耗费了更多的空间。
  3. Reference

  • 参考链接:https://www.runoob.com/w3cnote/ten-sorting-algorithm.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值