数据结构:排序

简单排序

冒泡排序

  • 不断向下(向上)比较相邻两个位置,如果顺序不对,则交换位置

  • 从而可以找到每一趟的最小值,并放在最下方

插入排序

​ 和打扑克抓牌一样,通过比较找到位置,移出空位,插入

简单选择排序

​ 选出最小或最大的然后交换位置

希尔排序

  • 每一趟以不同间隔进行选择排序

  • 定义增量序列 DM > DM-1 > … > D1 = 1

  • 对每个 Dk 进行“Dk-间隔”排序( k = M, M-1, … 1 )

  • 高效的增量序列

    • Hibbard 增量序列 Dk = 2k – 1
    • Sedgewick增量序列 94i–92i+1或 4i–3*2i+1

堆排序

生成最大堆,把堆顶元素和最后一个元素进行交换,对去掉一个最后元素(最大值本来就该在最后面)的新堆进行调整,再交换,再去元,再调整,周而复始,直到堆只剩一个元素。排序结束

归并排序

  • 核心:两个有序子序列不断的归并

  • 开辟临时数组,序列两两归并(若多出一序列,并入最后一个合成序列)放入临时数组,序列长度2,周而复始,直到序列长度大于数组。其中为节省空间,临时数组可以用一个临时数组与原数组进行来回倒。

快速排序

  • 选主元抽样(一般是头中尾)取中位数

  • 根据元素相对主元的大小,将集合分为两个集合

  • 不断进行集合拆分(递归),直到集合大小达到某一值时,对集合内的元素进行简单排序

表排序

  • 定义一个指针数组作为“表”,排指针即可,节省内存拷贝的时间。

  • 若非要进行内存排序,根据上一步的表,建“环”,根据环,进行内存位置调整,节省内存拷贝时间

基数排序(桶排序)

  • “建桶”,如果某些条件有序时,则元素有序。一种条件为一个过程,一种情况为一个桶。如1000以内的数有序,条件为百、十、个位数有序,情况为0-9。

  • 排序顺序

    • LSD(次位优先):条件重要性逆序
    • MSD(主位优先):条件的重要性顺序

排序方法比较

image-20210924140722408

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值