通俗理解
图码结合解释基数排序
排序过程
个位数排序
十位数排序
Java代码基数排序
public static void radixSort(int[] nums) {
long base = 1;
int[] out = new int[nums.length];
int maxValue = Arrays.stream(nums).max().getAsInt();
while(maxValue >= base) {
int[] bucket = new int[10];
for(int i = 0; i < nums.length; i++) {
int digit = (nums[i] / (int)base) % 10;
bucket[digit]++;
}
for(int i = 1; i < 10; i++) {
bucket[i] += bucket[i - 1];
}
for(int i = nums.length - 1; i >= 0; i--) {
int digit = (nums[i] / (int)base) % 10;
out[bucket[digit] - 1] = nums[i];
bucket[digit]--;
}
System.arraycopy(out,0,nums,0,nums.length);
base *= 10;
}
}
C++代码基数排序
class Sort {
public:
int radixSort(vector<int>& nums) {
int n = nums.size();
int base = 1;
vector<int> out(n);
int maxValue = *max_element(nums.begin(),nums.end());
while(maxValue >= base) {
vector<int> bucket(10);
for(int i = 0; i < n; i++) {
int digit = (nums[i] / base) % 10;
bucket[digit]++;
}
for(int i = 1; i < 10; i++) {
bucket[i] += bucket[i - 1];
}
for(int i = n - 1; i >= 0; i--) {
int digit = (nums[i] / base) % 10;
out[bucket[digit] - 1] = nums[i];
bucket[digit]--;
}
copy(out.begin(),out.end(),nums.begin());
base *= 10;
}
return 0;
}
}