解析:排序过程就是进行比较和交换过程,而时间复杂度就与比较和交换的次数相关。
解析:二维数组为4*3,可表示为
1 0 0
3 2 0
6 7 8
9 0 0
因为数组的起始位置为a[0][0],所以a[2][1]为第三行第二列,即7。
解析:递归工作栈里面包括返回地址、本层的局部变量和递归调用的形参代换用实参,所以正常情况下,无论递归过程有没有使用局部变量,转换为非递归过程都需要用栈来模拟这个递归调用过程。
不稳定:快选堆希
稳 定:插冒归基
归并排序的平均时间复杂度为O(nlogn), 其他三个排序的平均时间复杂度为O(n^2)
快速排序、归并排序和插入排序必须等到整个排序结束后才能够求出最小的 10 个数,而堆排序只需要在初始堆的基础上再进行 10 次筛选即可,每次筛选的时间复杂度为 O(log2n)
外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装入内存的部分,分别把每一部分调入内存完成排序。然后,对已经排序的子文件进行多路归并排序。
尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。 尾递归调用时,如果做了优化,栈不会增长,因此,无论多少次调用也不会导致栈溢出。
push() 在数组末尾添加元素,返回新数组长度,所以返回5
pop() 删除数组最后一位,返回所删除的元素,所以返回5
shift() 删除数组第一位,返回所删除的元素,所以返回1
unshift() 在数组开头添加元素,返回新数组长度,所以返回5