info: { blogIcon: 'https://cdn.luogu.com.cn/upload/usericon/765493.png', blogUser: 'OIerBoy', blogAvatar: 'https://cdn.luogu.com.cn/upload/usericon/765493.png', blogStartDate: '2023-04-22', webpageTitleOnblur: '(o?v?)ノ Hi', webpageTitleOnblurTimeOut: 1000, webpageTitleFocus: '(*′?`*) 欢迎回来!', webpageTitleFocusTimeOut: 1000, webpageIcon: "https://cdn.jsdelivr.net/gh/BNDong/Cnblogs-Theme-SimpleMemory@master/img/webp/blog_logo.webp", { enable: true, // 是否开启日/夜间模式切换按钮 auto: { // 自动切换相关配置 enable: false, // 开启自动切换 dayHour: 5, // 日间模式开始时间,整数型,24小时制 nightHour: 19 // 夜间模式开始时间,整数型,24小时制 } } },

基数排序

前言

基数排序是一种非常快且好写的排序。
以前一直以为基数排序就是桶排,现在发现自己很智慧,警钟长鸣。

思想

基数排序是一个以桶排为基础的排序。
桶排我就不多说了,简单且 O(n)
但是桶排有一个弊端,就是由于考试时空间限制是 108 左右,可需要排序的数据是 109 的,就不能用桶排了。
桶排中的空间其实有一大半都是浪费了的,那么换一种思路,我们可不可以将需要排序的 ai 拆成一位一位的再做。
这里定义 xiyi 中,xi 表示 ai 的第 K 位的数,yi 就表示第 K1 位的数字。
然后分别对 xiyi 进行桶排,并对 xi 的桶 ci 做前缀和,这时 xi 的排名就是 cxi1+1cxi
再对 yi 建立下标映射,设 pyiyi 的下标。
这里 xiyi 因为下标相同,表示的就是 ai
那么我们就可以用 xpi 来表示 yi 所对应的 xi
注意,这里我们从大到小i 进行遍历,yi 就是从大到小的,其 api 就是 cxpi1+1cxpi 范围中排名最大的。
cxpi 就是 api 的排名。最后将 cxpi 减一再进行下一次遍历。

posted @   OIerBoy  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示