这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
排序算法
不稳定算法
重复元素在排序后顺序和排序前不同
不稳定,快(快速)些(希尔)选(选择)一堆(堆排序)好友
O(nlogn)算法
快(快速)些(希尔)以nlogn速度归(归并)队(堆排),其他排序都是O(n2)
快速排序以及和归并对比
分治,但是还是比归并排序快:
归并需要临时数组
归并是从底向上merge,快排是自顶向下
1、归并写数组操作必快排(原地排序)多。
2、相对于堆排序,快排是数组内,访问快。
堆
建堆:层序。O(n)
调整:从右至左从下到上层序顺序调整
插入:最右下+调整
删除:最右下放到top+调整
时间复杂度固定nlogn,比快排的优点
元素的移动次数与关键字的初始排列次序无关的是:基数排序
元素的比较次数与初始序列无关是:选择排序、折半插入排序
算法的时间复杂度与初始序列无关的是:选择排序、堆排序、归并排序、基数排序
算法的排序趟数与初始序列无关的是:插入排序、选择排序、基数排序
B树&B+树
B树
多叉平衡搜索树,关键字内容不重复
m阶:孩子节点(指针)最多几个,关键字n-1个
根最少2分支,非叶子至少m/2分支,叶子节点在同一层
b树比平衡查找树限制更强(叶子在同一层)
B+树
关键字内容重复,n阶b+树结点最多有n个元素,叶子节点包含全部关键字及其信息,非叶子节点每个关键字只代表孩子节点中的最大关键字。叶子节点首尾相连。
B+查找效率更稳定,整个树遍历B+更快
in&>>
cin是iostream的一个对象,本身不存在返回值,cin的“返回”是std重载了>>,返回值istream&。
而对于while(cin>>a)(相当于operator>>(cin, a)),istream重载了bool类型转换函数
即while(cin>>n)相当于while((cin>>n).bool())。如果没有重载bool操作符,则不能判断
对于一般类,对比如下
A a;
if (a) //错
if (a) //可以,类重载operator bool()const{return true;}类型转换函数比较特殊,没有返回值