基数排序是一个稳定的排序,其效率与位数有关,且消耗多余等大的空间来存放数组
步骤:
1.读取最大位数
2.按最大位数循环,根据每个位数字排序
3.建立一个容量都为零的位桶,记录每个桶的大小
4.把桶的大小转化成每个桶最后一个数字的位置
5.根据每个模10的余数对应的桶多标的位置逆序将元素放入一个副数组中
6.把副数组写入主数组
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstring>
using namespace std;
int arr[1001] = {314, 617, 253, 335, 19, 237, 464, 121, 46, 231, 176, 344};
int tmp[1001];
int max_bits(int n){
int ans = 1, tmp, t;
for(int i = 0; i < n; i++){
tmp = arr[i]; t = 0;
while(tmp){
tmp /= 10;
t++;
}
ans = ans > t ? ans : t;
}
return ans;
}
void radix_sort(int n){
int bits = max_bits(n); //位数
cout << bits << endl;
int cnt[10], radix = 1, i, j, k;
for(i = 1; i <