data1: 12 26 37
i
data2: 24 30
j
data3: 12 24 26 30 37
一、归并排序
平均时间复杂度O(2NlogN),稳定,对数据有序性不敏感,非就地排序,不适用于对海量数据进行排序。
二、线性查找
1.算法:逐个比较,找到为止。
2.评价:O(N),对数据的有序性没有要求。
三、二分查找
1.算法:假设数据按升序排列,取中间位置值,如果目标等于中值,则查找成功;如果目标小于中值,则在中值左侧继续查找;如果目标大于中值,则在中值右侧继续查找;直到找到或者找不到为止。
2.评价:O(logN),数据必须有序。
四、函数模板
1.通用语法
template<class/typename 类型形参1, ...>
返回类型 模板函数名 (形参表) {
...
}
2.实例化语法
模板函数名<类型实参1, ...> (实参表);
如果所有的类型参数都可以根据函数实参表推断出来,那么类型实参表可以省略——隐式推断。
3.特化语法
template<>
返回类型 模板函数名<类型实参1, ...> (形参表) {
...
}
五、类模板
1.通用语法
template<class/typename 类型形参1, ...>
class 类模板名 { ... };
2.实例化语法
类模板名<类型实参1, ...> 对象名 (...);
模板 -实例化-> 类 -实例化-> 对象
编译期 运行期
3.特化语法
1)全类特化
template<>
class 类模板名<类型实参1, ...> { ... };
2)成员特化
template<>
返回类型 类模板名<类型实参1, ...>::成员函数名 (形参表) { ... }
练习:任选一个排序函数,将其模板化,支持对任意类型(int、string、char*、Student,...)的数组进行排序。
六、局部特化
1.特化程度高者优先。
2.针对指针特化优先。
3.参数匹配高者优先。
七、非类型参数与缺省参数
1.模板除了带有类型参数以外,还可以带有非类型参数(值参数),但是非类型实参必须是由常量或具有常属性的变量(不能带volatile)组成的表达式。
2.模板的类型参数和非类型参数都可以带有缺省值,但是与函数参数的缺省值一样,必须靠右。
八、模板型的模板参数
用一个模板类作为另一个模板的类型参数。