您现在的位置是:亿华云 > 系统运维
拜托,面试别再问我计数排序了!!!
亿华云2025-10-09 15:00:41【系统运维】7人已围观
简介排序,面试中,问的比较多。时间复杂度为O(n)的排序,除了基数排序(Radix Sort),还有计数排序(Counting Sort)。今天,1分钟,通过几幅图,争取让大家搞懂计数排序。计数排序的适用
排序,拜托面试中,面试问的别再比较多。
时间复杂度为O(n)的问计排序,除了基数排序(Radix Sort),数排还有计数排序(Counting Sort)。拜托今天,面试1分钟,别再通过几幅图,问计争取让大家搞懂计数排序。数排
计数排序的拜托适用范围?
待排序的元素在某一个范围[MIN, MAX]之间。
画外音:很多业务场景是面试符合这一场景,例如uint32的别再数字排序位于[0, 2^32]之间。
计数排序的问计空间复杂度?
计数排序需要一个辅助空间,空间大小为O(MAX-MIN),数排用来存储所有元素出现次数(“计数”)。
画外音:计数排序的核心是,空间换时间。源码下载
计数排序的关键步骤?
步骤一:扫描待排序数据arr[N],使用计数数组counting[MAX-MIN],对每一个arr[N]中出现的元素进行计数; 步骤二:扫描计数数组counting[],还原arr[N],排序结束;举个栗子:
假设待排序的数组,
arr={ 5, 3, 7, 1, 8, 2, 9, 4, 7, 2, 6, 6, 2, 6, 6}很容易发现,待排序的元素在[0, 10]之间,可以用counting[0,10]来存储计数。
***步:统计计数
扫描未排序的数组arr[N],对每一个出现的元素进行计数。
扫描完毕后,计数数组counting[0, 10]会变成上图中的样子,如粉色示意,6这个元素在arr[N]中出现了4次,在counting[0, 10]中,下标为6的位置计数是4。
第二步:还原数组
扫描计数数组counting[0, 10],源码库通过每个元素的计数,还原arr[N]。
如上图粉色示意,count[0, 10]下标为6的位置计数是4,排完序是4个连续的6。
从counting下标MIN到MAX,逐个还原,填满arr[N]时,排序结束。
神奇不神奇!!!
计数排序(Counting Sort),总结:
计数排序,时间复杂度为O(n); 当待排序元素个数很多,但值域范围很窄时,计数排序是很节省空间的;希望这一分钟,大家有收获。
【本文为专栏作者“58沈剑”原创稿件,转载请联系原作者】
戳这里,看该作者更多好文
很赞哦!(14)
相关文章
- 域后缀首选.com,.net,然后是.cn。后缀选择不当,导致流量损失。域名是企业与互联网网址之间的链接,关键是企业在网络上存在的标志。因此,选择好域名是开展网上工作的首要重要条件。
- 什么? C 语言动态库免费大放送了?
- 【图解鸿蒙】使用绘图组件Canvas绘制心率曲线图
- 鸿蒙HarmonyOS三方件开发指南(1)-PrecentPositionLayout
- 当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
- 面试官:如果让你设计一个高并发的消息中间件,你会怎么做?
- 虚拟DOM如何进化为真实DOM
- Nature盘点的这些代码,个个都改变了科学
- 用户邮箱的静态密码可能已被钓鱼和同一密码泄露。在没有收到安全警报的情况下,用户在适当的时间内不能更改密码。在此期间,攻击者可以随意输入帐户。启用辅助身份验证后,如果攻击者无法获取移动电话动态密码,他将无法进行身份验证。这样,除非用户的电子邮件密码和手机同时被盗,否则攻击者很难破解用户的邮箱。
- 偷师 Next.js:我学到的 6 个设计技巧