基数排序
2021-01-22 22:15
标签:http str int dig 相同 curd out for tmp 基数排序(radix sort): 对个位数先排序,再对十位数排序,以此类推。。 如果数据不满足位数相同,要对不够位数的数字前面补0(或者做类似处理)。 时间复杂度O(nk)其中n为数字个数,k为最多的数字位数。 运行结果: 基数排序 标签:http str int dig 相同 curd out for tmp 原文地址:https://www.cnblogs.com/FdWzy/p/12886064.htmlvoid RadixSort(vectorint>& nums){
int maxDigits=1;
for(const int& num:nums){ //找到最长数字位数
maxDigits=max(maxDigits,int(to_string(num).size()));
}
int tmp[11][100]={0}; //临时桶,分别对应0~9数字
int radix=1,curDigit=0; //从倒数第一位(个位)开始
while(curDigitmaxDigits){
int cnt[11]={0}; //cnt[i]=k:当前轮次第i个桶已经放了k个数字
for(const int& num:nums){
if(num>=radix){
int n=(num/radix)%10; //考察数字为n
tmp[n][cnt[n]]=num; //放入n对应的桶
cnt[n]++; //n对应的桶增加一个元素
}
else{ //当前要考察的位是0
tmp[10][cnt[10]]=num;
cnt[10]++;
}
}
//按顺序放回原数组,其中先放回当前考察位为0的
int index=0;
for(int i=0;i