软考-算法(排序)

所有常数级的时间复杂度都用O(1)来表达

log2n这种时间复杂度出现在树中,比如一个3层的平衡度比较好的排序二叉树结点数为7,你查找某个数是否在这个树中,最多需要查找3次,大概就是log2n的时间复杂度.

 

二分查找的前提是序列是有序序列.

 

散列表

减少冲突的方法:可以把空间取的大一些,比如取余法中把余数设的大一些.

 

排序

稳定排序:值相等的两个或者多个元素,在排序后仍然保持之前的前后关系,这个就是稳定的.

比如图中的黑色的21在红色的21前面,排序后如果仍然还是这样,则是稳定.之所以要考虑这个,是因为数值相等,可能有别的属性不一致,有时候不想改变这个顺序.

内排序:指的是在内存中排序;

 

 

归并排序和基数排序考察概率比较小

直接插入排序

希尔排序

直接选择排序

 

堆排序:

主要用途:Top N问题.

所有的孩子结点都小于根结点,称为大顶堆.所有的孩子结点都大于根结点,称为小顶堆.

堆排序的原理:

比如建立起来小顶堆,则堆顶就是全局最小的值;把堆顶取走,再去构造堆,得到的就是第二小的值;以此类推,就能够得到排列好的序列.

初建堆的过程比较复杂,之后删掉根结点,再调整就会简单一些.

优势:更高效;

建堆过程:

首先将所有的元素按照完全二叉树的方式进行排列;将所有的非叶子结点选出来;从最后一个非叶子结点开始进行判断,看两个子节点是不是都小于它(比如此时要创建大顶堆),如果不是则进行交换;然后对倒数第二个非叶子结点也进行这样的判断,以此类推,如果调整后下面的结点不满足原则了,就再次调整.

调整堆过程:

当堆顶被取走后,将当前树中最后一个元素放到堆顶位置,然后再用向下比较的方式来依次开展.

 

归并排序

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingLife99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值