![c4a37043697daba625057a5b0f0a7bed.png](https://i-blog.csdnimg.cn/blog_migrate/39f011819eaf98fab130e7bf53ab3d6f.png)
目录:
- 排序算法
- 冒泡排序
- 快速排序
- 归并排序
- 直接插入排序
- 希尔排序
- 选择排序
- 堆排序
2.查找算法
- 二分查找
3.二叉树的前序、中序、后序、层次遍历
4.如何写构造函数,拷贝构造,拷贝赋值,操作符重载?
5.如何写singleton设计模式?
6.TopK?
7.动态规划
1.1、冒泡排序
void
1.2、快速排序
基本思路:
- 任取一个中心元素(如第一个)
- 所有比它小的元素放在前面,比它大的元素放在后面,形成左右两个子表
- 对各个子表重新选择中心元素并依次按照规则调整(递归思想)
- 直到每个子表的元素只剩一个
int
复杂度分析:
在程序中使用递归,需要递归调用栈的支持,而栈的长度取决与递归调用的深度。
平均情况下,需要O(logN)的栈空间,最坏O(N)。不稳定排序。时间复杂度平均O(nlogN),最坏O(
1.3、归并排序
void
复杂度分析:
时间复杂度:O(nlogn);空间复杂度:O(n);稳定排序
1.4、直接插入排序
思路:
![0314565aafe7fabb9406a6323f1f49dc.png](https://i-blog.csdnimg.cn/blog_migrate/d8a1c62f91e80194edfd74b880005250.jpeg)
void
1.5、希尔排序
基本思路:先将整个待排序的序列分割成若干个子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。
void
1.6、选择排序
基本思路:
![6f47d411f242e6e4320c3d9397664eff.png](https://i-blog.csdnimg.cn/blog_migrate/34fb8a2dc46b1eab2400404acf0df075.jpeg)
void
2.1、二分查找
递归实现:
int
非递归实现:
int
3、二叉树的前序、中序、后序、层次遍历
递归和非递归实现
https://blog.csdn.net/invisible_sky/article/details/80816797blog.csdn.net4、如何写拷贝构造,拷贝赋值,操作符重载?
以string为例。
MyString
拷贝构造函数
MyString
拷贝赋值函数,注意:返回值的类型声明为该类型的引用,为了连续赋值。
MyString
5、如何写singleton设计模式?
/*
6.TopK实现?
#include
7.动态规划
7.1 是否包含和为s的子数组?