当前位置: 首页 > news >正文

LeetCode 基数排序题解

LeetCode 基数排序题解

题目描述

实现基数排序算法,对一个整数数组进行排序。

示例

输入:[64, 34, 25, 12, 22, 11, 90]
输出:[11, 12, 22, 25, 34, 64, 90]

解题思路

方法:基数排序

思路

  • 基数排序的核心思想是按照从低位到高位的顺序,对数组中的元素进行排序。
  • 具体步骤:
    1. 找出数组中的最大值,确定最大位数。
    2. 从最低位开始,对数组中的元素进行计数排序。
    3. 对每一位进行计数排序,直到最高位。
    4. 最终得到排序后的数组。

复杂度分析

  • 时间复杂度:O(n * k),其中 n 是数组的长度,k 是最大位数。
  • 空间复杂度:O(n + k),需要额外的空间来存储计数数组和临时数组。

代码实现

方法:基数排序

# 基数排序 def radix_sort(arr): if not arr: return arr # 找出数组中的最大值 max_val = max(arr) # 计算最大值的位数 max_digit = len(str(max_val)) # 从最低位开始,对每一位进行计数排序 for i in range(max_digit): # 计算当前位的除数 divisor = 10 ** i # 创建计数数组 count = [0] * 10 # 统计每个数字出现的次数 for num in arr: # 提取当前位的数字 digit = (num // divisor) % 10 count[digit] += 1 # 计算累积计数 for j in range(1, 10): count[j] += count[j - 1] # 创建临时数组 temp = [0] * len(arr) # 从后向前遍历原数组,按照当前位的数字将元素放入临时数组 for j in range(len(arr) - 1, -1, -1): digit = (arr[j] // divisor) % 10 temp[count[digit] - 1] = arr[j] count[digit] -= 1 # 将临时数组复制回原数组 arr = temp return arr # 测试 def test_radix_sort(): arr = [64, 34, 25, 12, 22, 11, 90] print(radix_sort(arr)) # 输出:[11, 12, 22, 25, 34, 64, 90] arr = [5, 4, 3, 2, 1] print(radix_sort(arr)) # 输出:[1, 2, 3, 4, 5] arr = [1, 2, 3, 4, 5] print(radix_sort(arr)) # 输出:[1, 2, 3, 4, 5] if __name__ == "__main__": test_radix_sort()

测试用例

测试用例 1:基本情况

输入:[64, 34, 25, 12, 22, 11, 90]
输出:[11, 12, 22, 25, 34, 64, 90]

测试用例 2:逆序数组

输入:[5, 4, 3, 2, 1]
输出:[1, 2, 3, 4, 5]

测试用例 3:已排序数组

输入:[1, 2, 3, 4, 5]
输出:[1, 2, 3, 4, 5]

总结

基数排序是一种非比较排序算法,它按照从低位到高位的顺序,对数组中的元素进行排序。基数排序的时间复杂度为 O(n * k),其中 k 是最大位数。

基数排序的核心思想是:按照从低位到高位的顺序,对数组中的元素进行计数排序。

基数排序适用于元素范围较大但位数有限的数组,当元素的位数较多时,基数排序的时间复杂度会增加。

掌握基数排序的原理和实现,对于理解非比较排序算法非常重要。

http://www.jsqmd.com/news/717355/

相关文章:

  • SeqGPT-560M在法务合规场景应用:合同关键条款(金额/期限/违约方)自动定位
  • 镜像视界,定义执行时代
  • HASS测试提升电源设备可靠性的原理与实践
  • tabulate性能优化与最佳实践:让你的表格渲染速度翻倍
  • 终极Flux Standard Action调试指南:5个简单技巧快速解决FSA常见问题
  • Zeego性能优化秘籍:提升React Native应用菜单体验的7个技巧
  • Phi-3-mini-4k-instruct-gguf入门必看:从镜像拉取到首次成功提问的10分钟实操
  • 告别繁琐配置!SiYuan字体自动化部署终极指南:让知识管理更具个性化
  • 2026届毕业生推荐的AI科研网站实际效果
  • 告别数据丢失:如何在Reflex纯Python Web应用中选择localStorage与IndexedDB存储方案
  • 为什么SynthText是文本检测模型训练的秘密武器?
  • 探索Consul发现链:构建智能服务路由与负载均衡的终极指南
  • **发散创新:基于 Rust 的隐私沙盒设计与实践——从原理到代码落地**在现代Web 应
  • HR面反问别再问薪资福利了!3个高情商问题帮你摸清公司真实情况
  • Agent 工具调用链路的决策失效:从误触发到分层治理的工程复盘
  • Spring Boot Starter Swagger分组功能深度解析:实现多版本API管理
  • OTDR光纤测试技术原理与工程实践指南
  • 全球困于孤岛与慢仿真,中国镜像视界以可执行元神实现代差领跑
  • Fairseq-Dense-13B-Janeway高算力适配:动态显存分配策略降低峰值占用15%
  • SwiftyCam自定义开发:如何扩展框架功能满足特定需求
  • LeetCode 排序算法的比较与选择题解
  • AMD Versal VP1902 SoC:突破芯片仿真与原型设计瓶颈
  • Phi-4-Reasoning-Vision实操手册:GPU显存占用监控与双卡负载均衡验证
  • D2L.ai金融风控:欺诈检测与信用评分模型的终极指南
  • 终极指南:如何自定义Aerial屏保的日出日落时间
  • 微信小程序+Pixel Couplet Gen:春节祝福语个性化生成与社交分享闭环
  • 智慧园区——智慧园区架构图合集
  • ACE-Lite协议在TLB与PTW模块中的关键作用与优化实践
  • 保姆级教程:在Docker版夜莺监控中,如何搞定SNMP插件缺失的snmptranslate和MIB文件?
  • 技术内幕:一文读懂章鱼AI的跨平台数据采集与创作架构