算法库的头文件
问题1
sort源码:
(堆排序)
_Ideal是元素的个数
每次递归:_Ideal都要缩小
_Ideal来控制栈的深度,是为了让树趋于平衡的情况,如果超过这个,认为此时序列趋于有序,认为树的倾斜度高,而且如果元素过多,快排递归次数过多,会把栈撑破。此时每段序列比较短,适合堆排。
当递归达到 _Ideal<=0,而且此时元素量也比较少了,序列就短了,就把快排转为堆排序,空间复杂度是O(1)
如果用归并,占用额外的内存空间会比较多。
控制到1.5倍的log以2为底的n
(快速排序算法+插入排序算法)
问题2
问题3
在sort源码,通过参数_Ideal(元素的个数)
每次递归,对_Ideal进行缩减,直到_Ideal<=0的时候,转成堆排序
问题4
效率变慢
递归是函数自己调用自己,调用一次函数,就有函数的开销(栈帧开辟,压很多东西,弹出很多东西,栈帧回退),如果递归过深,说明函数调用次数过多,函数开销变大,
栈内存相对来说比较小,递归过深,说明函数调用次数过多,导致栈内存溢出,程序挂掉
问题5
参考问题3的答案
没排完,转成另一个非递归的排序算法就可以了,一般用堆排序(平均,最坏,最好的时间复杂度都是一样的)
问题6
选择E:堆排序
在事先不了解数据特征,在最坏,最好,平均的时间复杂度都是O(nlogn)
问题7
只能原地排序,不能占用额外的内存空间,空间复杂度是O(1)
数据是1G,内存是1G
选择C归并排序(空间复杂度最大,1次只能排序1部分,没有排序的在磁盘上,磁盘I/O操作多)
问题8
选择A 归并排序
只有归并排序可以进行外排序(磁盘上的数据排序,其他排序算法都是内排序)
归并排序在这个场景怎么排?
外排序涉及的是磁盘I/O,效率比较低。