python | 算法大神左神(左程云)算法课程 第三节
2022/8/15 14:56:25
本文主要是介绍python | 算法大神左神(左程云)算法课程 第三节,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
基数排序-python版
视频笔记戳这里
# 基数排序 # 针对非负数排序 class radixSort(): def radixSortAll(self, arr): """ 对数组arr进行基数排序 :param arr: List[int] :return: None """ if len(arr) < 2: return self.radixSortLR(arr, 0, len(arr)-1, self.maxBits(arr)) def maxBits(self, arr): """ 求数组arr的最大位数 :param arr: List[int] :return: int """ #最大位数记为max_bits max_bits = 0 #寻找数组中的最大值max_num max_num = -1 for i in range(len(arr)): max_num = max(arr[i], max_num) # 计算最大值的位数 while max_num != 0: max_bits += 1 max_num //= 10 return max_bits def radixSortLR(self, arr, L, R, digit): """ 对数组arr的L~R位置进行基数排序,其中位数最大为digit :param arr:List[int] :param L:int :param R:int :param digit:int :return:None """ #设置基数 radix = 10 #辅助空间数组 help = [0]*(R-L+1) #从个位开始,一位一位排序 for i in range(digit): #统计当前位的词频 count = [0] * radix for j in range(R-L+1): cur_num = self.getDigit(arr[L+j], i+1) count[cur_num] += 1 #此处count[cur_num]的值表示数字cur_num出现的次数 #统计好词频之后,将每个位置代表的次数向后累加 j = 1 while j < len(count): count[j] += count[j-1] #此时count[j]表示小于等于j的数字出现的次数 j += 1 #从右向左拿出原数组的数按照当前位进行排序 j = R while j >= L: current = self.getDigit(arr[j], i+1) help[count[current]-1] = arr[j] count[current] -= 1 j -= 1 #本轮排完序的数拷贝回原数组 for j in range(len(help)): arr[L+j] = help[j] def getDigit(self, num, d): """ 获取数字num的第d位数字(从个位开始) :param num: int :param d: int :return: int """ for i in range(d): res_num = num % 10 num = num // 10 return res_num
这篇关于python | 算法大神左神(左程云)算法课程 第三节的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南