基数排序
将整数每个位数分别比较,先找出最长位,针对每个位(个位,十位…)利用桶的思想,将每个位的元素个数统计,倒序读入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为排序后的数组。