1.最坏情况下 insert sort, quick sort ,merge sort 的复杂度分别是多少?
//插入排序 快速排序 归并排序
O(n*n),O(nlogn),O(n*n)
O(n*n),O(n*n),O(nlogn)
O(n*n),O(nlogn),O(nlogn)
O(nlogn),O(nlogn),O(nlogn)
2.下列关于堆和栈的区别描述错误的有?
申请方式的不同,堆是系统自动分配,栈是自己申请
栈的大小是固定的,堆的大小受限于系统中有效的虚拟内存
栈的空间由系统决定何时释放,堆需要自己决定何时去释放
堆的使用容易产生碎片,但是用起来最方便
解析:堆是自己做饭自己吃,可以吃不完剩下;但是栈是公司食堂,公司分配食物,严格遵守公司食堂。
3.关于堆数据结构,下面描述中正确的有()
可以用堆实现优先队列(priority_queue)
使用堆可以实现排序算法,复杂度为N * log N
从M个元素中查找最小的N个元素时,使用大顶堆的效率比使用小顶堆更高
在大顶堆中,第N层中的所有元素比第N+1层中的所有元素都要大
堆数据结构可以用数组方式存储,存储的是一棵完全二叉树
//在大顶锥中,第N层不一定比N+1层大,因为有好几个节点啊。
4.对于序列( 12 , 13 , 11 , 18 , 60 , 15 , 7 , 19 , 25 , 100 ),用筛选法建堆,必须从值为 ________ 的数据开始建初始堆
100
12
60
15
解析:筛选法建堆,先写成堆的形式,在看堆找数。
方法:从下到上,从右往左,寻找第一个非叶子结点的结点,所以是60
5.堆的形状是一棵(A)。
完全二叉树
满二叉树
二叉排序树
平衡二叉树