算法与数据结构1800题

局部有序,使用直接插入比较好
快排适用于大量无序数据

A

C

C
比较次数:画了n个括号,每一次画括号都要选出一个最大值
移动次数:已经排序号的元素是不需要移动的,只需要在选择出极值之后,将极值,与括号头的元素互换位置

B

C
但是希尔排序在最坏情况下的时间复杂度也是O(N^2)

A

C

C

快速排序想要减少递归深度,需要先处理短的序列:因为长的序列,短的序列,在栈中存的都是指针,大小是一样的,但是如果先处理长的,因为只能一个提个的处理,所以必须要不断的分解为很多小的,然后不断地存入栈中,这样就会加大栈的深度,也就是算法的递归深度(这里的递归深度,不是指递归树的深度,而是指栈的深度)

BD
堆排序,平均时间复杂度和最坏时间复杂度都是O(N*logN)

O(n^2) - O(n) == O(n^2)

答案是A,但是我觉得应该是选择AB

堆是层次遍历,而不是投影遍历(中序遍历),按照层次遍历的话,堆顶一定在数组的首部
二叉树中,叶子节点数一定等于分支节点数+1
如果节点数为n,则n/2向下取整及之前都是分支节点(从1开始),n/2向下取整+1以及之后为叶子节点

建堆要从最后一个分支节点进行筛选,一共有n/2向下取整个分支节点,所以需要进行有n/2向下取整次筛选

D 堆使用层次遍历描述

B
建立堆的过程:先不做任何改变,以层序遍历的方式建立二叉树,然后从第一个分支节点开始向前调整,每次调整只负责将所涉及到的结点为根节点的子树调整完毕,向下调整,一直推到底,但是不向上推
如果是大根堆,就与大的调整,如果是小根堆,就与小的调整

B

C

C

归并排序需要进行log(N),向上取整趟

每一项都与其他项进行比较,计算出小于该项的项的个数,以确定该项的位置,叫做枚举排序

A
堆排序:O(1)
快速分类(调用栈):O(logN)
归并分类:O(N)

C

BC
平均时间复杂度为O(N*logN)的算法:归并排序,堆排序,快速排序

个数较大,基数较小的时候,适合使用基数排序

A

A
最坏情况下的时间复杂度能达到的最好下界,等同于,最好的最坏时间复杂度:
冒泡排序,插入排序(直接插入,折半插入排序),选择排序,希尔排序,最坏情况下的时间复杂度都是O(N^2);
堆排序,归并排序,最坏情况下的时间复杂度为O(N*logN)
基数排序(P(N+B)) P为趟数,也就是数字的位数,B为基数,十进制就是10

时间下界,指的是最好情况下的时间下界:
组与组之间相对有序,只需要将各个组分别排序即可.
O(k*log(k)) * (n/k) = O(n * log k)

不会做

C

转载于:https://juejin.im/post/5b9b1c5ee51d450e67492f52

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值