常用排序-基数排序,计数排序

本文介绍了基数排序和计数排序这两种非比较整数排序算法,分析了它们的时间复杂度(O(d(n+K))和O(n+m))、空间复杂度(O(n+k)和O(m)),以及各自的适用场景,特别强调了计数排序对整数范围限制的要求。
摘要由CSDN通过智能技术生成

基数排序
将整数每个位数分别比较,先找出最长位,针对每个位(个位,十位…)利用桶的思想,将每个位的元素个数统计,倒序读入temp[10]列表中,
时间复杂度O(d(n+K)),k是10进制,n为最大位数,空间复杂度O(n+k)
计数排序
利用数组的下标确定元素的正确位置,适用于一定范围内的整数排序,最大值最小值差距太大不适用于计数排序,
在取值范围不是很大的情况下,性能超过快速排序。
求得最大整数MAX和最小整数MIN,数列最小值为偏移量,创建的数组长度就是MAX-MIN+1。
时间复杂度O(n+m),空间复杂度O(m),n是排序个数,m是最大最小的差值。
计数排序的最终步骤:
1、取无序数组list中的最大值max和最小值min,新建(max-min +1)长度的数组newArr和统计数组countArr。
2、遍历原数组list,将其值作为newArr的键,元素的个数作为值存放在该键处。
3、遍历newArr,使统计数组countArr和newArr相同索引处存放的是newArr该索引之前元素的和。
4、新建一个最终数组result,反向遍历原数组,取原数组的值arr[i]-min作为索引,从统计数组countArr取出该索引的值减1,作为最终数组result的索引,值为原数组的arr[i],同时统计数组该索引处值减1,遍历结束后,最终数组result为排序后的数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值