数据结构与算法-5

1.前缀树

  1. 单个字符串中,字符从前到后的加到一颗多叉树上
  2. 生成树的代价为O(N)

2.桶排序

  1. 时间复杂度O(N),额外空间复杂度O(M)
  2. 不基于比较的排序
  3. 缺点:应用范围有限,需要样本的状况满足桶的划分,一旦要求升级,改写代价很高
  • 计数排序

一般,样本是整数,且范围较窄

  • 基数排序

一般,样本是10进制的正整数

3.排序算法的稳定性

稳定性是指同样大小的样本在排序之后不会改变相对次序
对于基础类型来说,稳定性毫无意义
对非基础类型来说,稳定性有重要意义

排序算法是否能实现稳定性如何实现时间复杂度额外空间复杂度
选择排序n算法原理决定无法实现稳定性,eg: 3 3 3 3 3 1 3 3 3O(N^2)O(1)
冒泡排序y遇到相等数据不交换O(N^2)O(1)
插入排序y遇到相等数据停止交换O(N^2)O(1)
归并排序ymerge时遇到相等数据先拷贝左边,再拷贝右边O(N*logN)O(N)
快速排序npartition过程破坏了稳定性O(N*logN)
堆排序n只关注自己的结构O(N*logN)O(1)
计数排序yO(N)O(M)
基数排序yO(N)O(N)

4. 排序算法总结

  1. 不基于比较的 排序,对样本数据有严格要求,不易改写
  2. 基于比较的排序,只要规定好两个样本如何比较就能直接复用
  3. 基于比较的排序,时间复杂度极限为O(N*logN)
  4. 时间复杂读O(N*logN),额外空间复杂度低于O(N),且稳定基于比较的排序不存在
  5. 绝对速度选快排,省空间选堆排,稳定性选归并

5.坑

  1. 归并排序的额外空间复杂度可以变成O(1),“归并排序 内部缓存法”,但是将失去稳定性。用堆不好么???
  2. “原地归并排序”是垃圾,会让时间复杂度变成O(N^2)
  3. 快排稳定性改进,“01 stable sort”,但是会对样本数据要求更多。用桶排序不好么???
  4. 在整型数组中,请把奇数放在数组左边,偶数放在数组右边,要求所有奇数之间的原始的相对次序不变,所有偶数之间原始相对次数不变
    时间复杂度做到O(N),额外空间复杂度做到O(1)
    答:0/1标准的partition过程,无法做到稳定性,否则快排为啥不是稳定的呢???我不会,你来告诉我
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值