排序 | 基数排序
Posted YOUCRY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序 | 基数排序相关的知识,希望对你有一定的参考价值。
1.描述
示例 1
输入:arr = [8,7,6,5,4,3,2,1]
输出:[1,2,3,4,5,6,7,8]
2.分析
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;
}
}
};
以上是关于排序 | 基数排序的主要内容,如果未能解决你的问题,请参考以下文章