空间复杂度
递归是看深度的,有n层深度,就是O(n)。
循环队列(熟练掌握代码)
数据结构—散列表(哈希表)
哈希表本质上也是一个数组,它的原理是哈希函数,解决下标问题。
解决哈希冲突的方案
开放寻址法:
链表法:
扩容
二叉树(需要熟练掌握代码)
深度优先遍历:(前序中序后序)
创建二叉树和遍历二叉树都是用的递归:(链表方式)
前序遍历非递归方式:(栈)
通过pop出栈赋值给节点,实现往回走的逻辑:
广度优先遍历:(层序遍历)
使用队列完成:(非递归)
在输出这个节点的同时,将这个节点的左右孩子入队:
二叉堆(需要熟练掌握代码)
二叉堆是实现堆排序和优先队列的基础:
二叉堆的自我调整
1. 插入节点(上浮)
2. 删除节点(下沉)
3. 构建二叉堆
让所有非叶子节点“下沉”:
代码实现
二叉堆是用顺序存储的:
优先队列(需要熟练掌握代码)
优先队列的逻辑:
代码实现
排序算法(需要熟练掌握代码)
1. 冒泡排序
算法思想:
2. 代码实现
1)第一版代码
2)代码优化(第二版)
3)第三版
4)第四版优化(鸡尾酒排序)
算法思想:
代码实现:
3. 快速排序(需要熟练掌握代码)
快排是从冒泡排序演变而来的,其中用了分治的思想:
1)基准元素选择
2)元素的交换
3)代码实现(双边循环法—递归)
4)单边循环法(也是递归实现)
5)非递归方法
绝大多数的递归逻辑,都可以用栈的方式来代替:
4. 堆排序(熟练掌握代码)
1)代码实现
5. 计数排序(熟练掌握代码)
1)算法思想
2)代码实现(第一版)
3)第二版(优化)
问题 1 :
问题 2:
代码实现:
局限性:
6. 桶排序(由计数排序演变)
代码实现:
注解:以上代码有些许错误之处,以下是GPT写的桶排序代码,大体一致: