zoukankan      html  css  js  c++  java
  • 《数据结构与算法之美》10——排序(三)桶排序、计数排序、基数排序

    一、桶排序

    概念

    桶排序,核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的。

    应用场景

    桶排序比较适合用在外部排序中。所谓的外部排序就是数据存储在外部磁盘中,数据量比较大,内存有限,无法将数据全部加载到内存中。

    二、计数排序

    概念

    计数排序其实是桶排序的一种特殊情况。桶的个数n与最大值是k相等,省掉桶内排序的时间。

    计数排序中的计数指的是通过桶和原数组,能够转化为有序的。

    应用场景

    计数排序只能用在数据范围不大的场景中。并且计数排序只能给非负整数排序,如果数据是其他类型,要转化为非负整数。

    三、基数排序

    概念

    根据数据的每一位来排序,到达最终有序。

    应用场景

    基数排序对要排序的数据是有要求的,需要可以分割出独立的来比较,而且位之间有递进关系。除此之外,每一位的数据范围不能太大,要可以用线性排序算法来排序。

    四、课后思考

    假设我们现在需要对DaFBcAz这个字符串进行排序,要求将其中所有小写字母都排在大写字母的前面,但小写字母内部和大写字母内部不要求有序。比如经过排序之后为aczDFBA,这个如何来实现呢?如果字符串中存储的不仅有大小写字母,还有数字。要将小写字母的放到前面,大写字母放在最后,数字放在中间,不用排序算法,又该怎么解决呢?

    直接划分桶,小写字母、数字、大写字母三个桶,遍历字符串,把字母放进各自的桶里,然后再把小写字母、数字、大写字母三个桶直接合并。

  • 相关阅读:
    记一次授权的APK渗透测试
    Web.config在渗透中的作用
    ctf中关于syscall系统调用的简单分析
    【文件包含&条件竞争】详解如何利用session.upload_progress文件包含进行RCE
    利用python免杀cs shellcode
    记一次ARM架构的ROP利用
    改造冰蝎对抗waf&OpenRASP计划-初探
    java后台管理 开源_12款开源的JAVA后台管理项目
    ECS 选款利器!PTS助您快速上云!
    Ocelot 负载均衡
  • 原文地址:https://www.cnblogs.com/liang24/p/13174460.html
Copyright © 2011-2022 走看看