排序 | 基数排序

Posted YOUCRY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序 | 基数排序相关的知识,希望对你有一定的参考价值。

1.描述


基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部分信息,将要排序的 元素分配 至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序。


示例 1

输入:arr = [8,7,6,5,4,3,2,1]

输出:[1,2,3,4,5,6,7,8]

排序 | 基数排序


排序 | 基数排序


2.分析


基数排序时间复杂度均为O( n*k ) 。空间复杂度为 O(n+k)。
基数排序为稳定的排序算法。
排序 | 基数排序
排序 | 基数排序


3.代码


排序 | 基数排序
class Solution {public: //基数排序辅助函数 求最大位数 int maxBit(vector<int>& arr){ int cnt=1; int r=10; for(int i=0;i<arr.size();i++){ while(arr[i]>=r){ r*=10; cnt++; } } return cnt;    } void radixSort(vector<int>& arr){ vector<int> tmp(arr.size(),0);
int i,j,k,radix=1; //进行maxBit(arr)次排序 for(i=0;i<maxBit(arr);i++){ vector<int> cnt(10,0);//计数 for(j=0;j<arr.size();j++){             //统计每个桶的记录数 k=(arr[j]/radix)%10; cnt[k]++; } for(j=1;j<10;j++){ //算该位置上为radix的数移动到tmp中的位置 cnt[j]=cnt[j-1]+cnt[j]; } for(j=arr.size()-1;j>=0;j--){ k=(arr[j]/radix)%10; tmp[cnt[k]-1]=arr[j]; cnt[k]--; } //将tmp中的元素复制到arr 完成一轮排序 for(j=0;j<arr.size();j++){ arr[j]=tmp[j]; } radix*=10; }
}};






END







关注我们

https://leetcode-cn.com/u/cdxx/
ALWAYS HERE



以上是关于排序 | 基数排序的主要内容,如果未能解决你的问题,请参考以下文章

数据结构-排序之基数排序(使用java代码实现)

基数排序:基数排序中的“组”是啥意思?

算法-java代码实现基数排序

改变基数排序基础?

为啥我的基数排序 JAVA 实现比快速排序慢?

基数排序就是这么容易