一、排序算法【快速排序和归并排序是两个很好锻炼递归排序的例子】
1.排序算法的稳定性:
2.冒泡排序【最优时间复杂度o(n)即有序顺序表,最坏时间复杂度o(n^2),冒泡排序,两个对比,相等时,位置不动,后面的接着比较,所以稳定性比较稳定】
3.选择排序【将一个序列分成两部分,左边是有序,右边无序,右边做比较添加到左边,最终成为一个有序的线性表,稳定性:升序排列,且按照往右放,右边有序时,左边的先比较,大则往后放,最大的两个相同】【选择分两步,无序和有序,无序找最小下标,每次无序第一个看作最小下标值】
4.插入排序【插入排序分两步:有序和无序,无序取1,有序比较】
5.希尔排序【时间复杂度按照,gap=1时,为o(n^2),稳定性:不稳定】
6.快速排序【第一个元素取出,前后各放一个游标,坐标是比第一个元素小的,右边是大的,左右夹击,重合的时候,将第一个元素放到重合的位置】
【快速排序的实现:递归函数,递归本质层层进去,层层出来。第一步按照快速查找的思想走一遍,第二步,考虑到底走多少步】
7.归并排序【整个序列先对半,然后一直往下分,分到每个一个元素,再网上慢慢合并,合并的同时按照从小到大排列,代码实现:合并时,两组需要两个指针,然后进行值对比】
if条件添加“=”则为稳定排序,只有归并排序是会产生新的对象,其他都是在原有序列上操作
【一般用快排,不保序则用,保序则不可用】
二、搜索
1.二分查找【只能作用到有序的顺序表,链表不可以】又称折半查找,最优时间复杂度O(1),最坏时间复杂度O(logn)
非递归时使用:头尾下标之和除以2
三、树和二叉树
1.树的概念
2.
3.树的种类【二叉树:最多两个子树,完全二叉树除最后一层,都是满的,二叉排序树类似二分查找,左边的都比右边小】
4.树的应用
5.二叉树的性质
六、树是对链表的扩充
1.二叉树的广度优先遍历【按照队列的方式分析,左边取,右边添加】
2.广度遍历,指的是横向的
3.深度遍历的三种方式:先序(根节点放第一)、中序(根节点放中间)、后序(根节点放最后),无论哪种方式,都是从左到右
5.由遍历确定一棵树,必须有中序,有先序和中序或者中序和后序都可以确定一棵树
后序中,最后一个就是根,不论整个的最后一个还是,中间根分开的最后一个