insert(root,k):if root==NULL 新建一个值为k的node return node if k==root的值 无需插入 if k<root的值 //k插入到左子树 insert(root->left,k) else //k插入到右子树 insert(root->right,k) 3 由一个数组创建一个二叉排序树 创建二叉排序树的根节点,扫描数组,并逐个插入到二叉排序树中 create(...
1.5 unordered_map是关联容器,含有带唯一键的键-值对。搜索、插入和元素移除拥有平均常数时间复杂度。 1、C/C++中常用容器功能汇总 1.1 vector(数组)封装动态数组的顺序容器。 at():所需元素值的引用。 front():访问第一个元素(返回引用)。 back():访问最后一个元素(返回引用)。 beign():返回指向容器第一个...
两者是对时间复杂度和空间负责度的两个极端。 一开始我想要优化堆排序,使得堆排序的空间复杂度减小; 优化的思想很简单;我们并不申请一个与原数组大小一致的空间,而是申请一个他的映射数组; 当我们堆排序 insert 和 delete 后,映射数组中就存储了有序数据的信息; 例如:映射数组mapTab[0] = 20; //也就意味着...
首先find() 函数在极端情况下,复杂度才为O(1)。但insert()在大部分情况下,时间复杂度都为O(1)。只有个别情况下复杂度才比较高,为O(n). 这是insert()第一个区别与find()的地方。 我们再来看第二个不同的地方。对于insert()函数来说,O(1)时间复杂度的插入和O(n)时间复杂度的插入,出现的频率是非常有...
STL提供了丰富的算法库支持和各种容器,C++标准库提供了包括最基础的标准输入输出iostrem、各种容器vector、set、string ,熟练掌握标准库,不用重复造轮子(练手学习目的的造轮子除外)写出更C++的代码。 推荐书: 《C++ Primer 中文版(第 5 版)》 《STL源码剖析》 C++进阶 学完了上面的C++基础只是会用,要用好还需要...
InsertSort(a,15); print(a,15,15); } 4 快速排序 算法思想: 选取第一个数为基准 将比基准小的数交换到前面,比基准大的数交换到后面 对左右区间重复第二步,直到各区间只有一个数 快速排序动图演示代码:void QuickSort(vector<int>& v, int low, int high) { ...
1.没有自我介绍! 不按常规出牌 2.全局变量和static变量的区别.如果在两个.h文件中声明两个同名变量会怎么样? 如果使用extern 如果没有使用· 3.new 和malloc的区别 4.vector底层的实现. 这里我说的比较多,所以他问到了insert具体做里那些事情.resize函数调用的是什么样. 扩容的情况. ...
那按照他的意思修改后的测试结果依然一边倒(insert/find各五次,map/rbt只在100量级的insert上赢了...
*之所以vector没有push_front(),是因为vector执行此表达式复杂度为线性时间,而deque为固定时间。(这与它们的特性有关,下面讲到) (一)vector vector是最简单也是最重要的一个容器。其头文件为<vector>. vector是数组的一种类表示,它有以下优点:自动管理内存、动态改变长度并随着元素的增减而增大或缩小。
void QuickSort(vector<int>& v, int low, int high) { if (low >= high)// 结束标志 return; int first = low;// 低位下标 int last = high;// 高位下标 int key = v[first];// 设第一个为基准 while (first < last) { // 将比第一个小的移到前面 while (first < last && v[last]...