算法学习笔记-【排序篇】

1. 冒泡排序


O(1) O(n平方) 稳定 


2. 插入排序-优化为希尔排序


O(1)  O(n平方) 稳定 


3. 选择排序


O(1) O(n平方)  不稳定 


4. 归并排序nlog(n) 分治


O(n) nlog(n) 稳定 


5. 快速排序nlog(n) 分治思想


 
平均时间复杂度  有序度

桶排序 logn


例子:考生分数

计数排序logn


例子:分数比较集中

基数排序logn


例子:手机号


二分查找


查找第一个值等于给定值得元素
查找最后一个值等于给定值得元素
查找第一个大于等于给定值得元素
查找最后一个小于等于给定值得元素

跳表


实际应用基于链表的二分法 - 带多层索引
查找插入删除
时间: Ologn
 空间: Ologn
需要动态更新索引(可以联想到平衡二叉树)
按照区间查找数据 红黑树没有跳表效率高

hash表 - 散列表 - 数组的拓展


避免散列冲突


开放寻址法:在原数组中挨个存储相同元素
需要标记已经删除的元素为delete
评价:装载因子不能过大,比较浪费存储空间

链表法


避免dos攻击:运用跳表、红黑树
评价:适合存储比较大的对象,大数据量

装载因子过大,共同需要动态扩容,避免一次性扩容


连续空间>时间>碎片空间

哈希算法


MD5、SHA1、SHA256
应用场景:
安全加密、唯一标识、数据校验、散列函数、负载均衡、数据分片、分布式存储。
要求:
难反向推到、散列冲突低

推广:区块链

二叉树

遍历:O(n)
前中后序

二叉查找树


支持动态数据集合快速插入、删除、查找

删除取巧:标记delete
O(hieght) 小于O(log2n)

平衡二叉查找树

AVL树和红黑树区别,为什么使用红黑树更多
https://blog.csdn.net/zhangvalue/article/details/101483736

查找、删除、插入 
AVL树:时间复杂度: O(logn) 旋转次数O(logn)
红黑树:时间复杂度: O(logn) 旋转次数O(logn)

堆排序

实质:完全二叉树

利用大顶堆、小顶堆解决问题:

  • 优先级队列
  • 合并有序小文件
  • 高性能定时器
  • 求topK
  • 求中位数
  • 求n%位数


有向图、无向图
邻接矩阵存储方法
邻接表存储方法LinkedList
邻接表中的链表可以替换为红黑树、跳表、散列表、动态有序数组等

搜索示例
顶点数:V 边数:E

  • 深度优先遍历DFS

走迷宫,回溯思想
借助递归和栈来实现
搜索出来不是最短路径
空间复杂度O(E)

  • 广度优先遍历BFS

地毯式,层层推进
空间复杂度O(V)
经过改造后记录每个顶点与起始定点距离,容易找出n度关系

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值