算法补充|青训营笔记

110 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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;}类型转换函数比较特殊,没有返回值