list 排序_排序算法&时间复杂度计算

对于排序算法而言,有几个重要的点:

  1. 理解此种排序算法是怎么运行的
  2. 理解算法的时间复杂度与空间复杂度计算

递推公式(关乎时间复杂度的计算)


递推公式主要为以下的形式(递归使用的复杂度也这么算):

具体推导:

https://jeffe.cs.illinois.edu/teaching/algorithms/notes/99-recurrences.pdf​jeffe.cs.illinois.edu https://www.cs.ucdavis.edu/~gusfield/cs222f07/mastermethod.pdf​www.cs.ucdavis.edu

公式1的递推公式复杂度计算:

6a785467b0a664c24cdc413c3bf0dd55.png

db7106373a6fe90c429d723eca2d44fc.png
Analysis of Algorithm | Set 4 (Solving Recurrences) - GeeksforGeeks​www.geeksforgeeks.org

如何推导的三种方法

  1. Substitution Method

53659ef3f47bfcafac0e644d8e48c0ac.png
Substitution Method

2. 递归树(大体思路是使用树的思想来计算时间复杂度,将每一层的复杂度算出来,然后将所有层的时间复杂度相加)

adce1d0cb054cb6f7243821233f17a8b.png
Recurrence Tree Method

3. Master Method(万能方法,可以直接得到递归方程的解,但是只有以下形式可以利用)

a17fc46ba6db94d8f10f7a32e5c83f31.png
Master Method

Merge sort:(

Binary Search:(

如果还有不清楚的,可以做一下以下的练习

https://www.csd.uwo.ca/~mmorenom//CS424/Ressources/master.pdf​www.csd.uwo.ca

插入排序()

按照顺序温习了一下算法,用Python实现的,格式是按照leetcode写的。

十大经典排序算法动画与解析,看我就够了!(配代码完全版)-五分钟学算法​www.cxyxiaowu.com
232ac6a0944b1d40f99869b58dab5993.png
「多图警告」手撕排序算法 - iOS进阶必备​mp.weixin.qq.com
43d4a98d990a6a20ebaae29659e02712.png

个人感觉动画没办法看清楚算法的演变过程,所以是 动画+示意图

冒泡排序

aaef51d550e2ddff9259fd24be294187.png

7b800a0e714dc69c99c524b2ffad0dcb.png

49df360718855d8091a3e8991f40f28f.png
class 

冒泡排序优化

选择排序

83df37fe05f6766c95c43a5c4d82f702.png
class 

插入排序

Python 插入排序 | 菜鸟教程​www.runoob.com
a1ca72791950d2d91953718ab3cac455.png
class 

归并排序

归并排序

堆排序

list = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2]

a7881f04af5e7ec84939d0771d0d6713.png
红色:list里面储存数据的序号
largest 

heapify使用了一个递归方程,主要保证了最大(小)堆一定是满足条件1,2,3的,用递归主要是为了便利所有的节点。

heapsort最奇怪的是for循环是从n-->1,这个算法是一个o(n)的算法,如果是从根节点向下取寻找最大值的话,那么如果最大值在最后的叶子节点,就算找到了最大值,也无法通过交换到根节点,如果是从叶子节点开始便利那么每一个节点的最大值,就会通过二叉树交换到根节点。

heapsort使用已经建立好的max heap,每次取第一个数字,放到List最后面。然后重新heapfiy

# Python program for implementation of heap Sort
 

疑问1:heapify为什么是o(nlogn)的算法

疑问2:heapify为什么是不稳定的算法

疑问3:heapify

计数排序

桶排序

基数排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值