写出完整基数排序代码
时间: 2024-12-22 17:10:25 浏览: 13
基数排序(Radix Sort)是一种非比较型整数排序算法,它按照整数的位数从低到高对数字进行排序。下面是基数排序的一个完整示例,用C++编写,用于对整数数组进行排序:
```cpp
#include <iostream>
#include <vector>
#include <array>
// 定义辅助函数,获取最大数的位数
size_t getMaxDigits(const std::vector<int>& arr) {
size_t maxDigit = 0;
for (const auto num : arr) {
maxDigit = std::max(maxDigit, static_cast<size_t>(std::log10(num)) + 1);
}
return maxDigit;
}
// 基数排序函数,按指定位数分桶并排序
void radixSort(std::vector<int>& arr, size_t digit) {
std::vector<std::array<int, 10>> buckets(10);
for (auto& num : arr) {
// 获取当前位的值
int digitValue = num % 10;
// 将数值放入对应桶中
buckets[digitValue][digit / 10]++;
}
// 放回数值到原数组
for (size_t i = 1; i < 10; ++i) {
for (int value = 0; value < buckets[i].size(); ++value) {
buckets[i][value] += buckets[i - 1][value];
}
}
for (auto& num : arr) {
// 从最后一个桶开始反向处理,找到对应的索引位置
int position = buckets[num % 10][digit / 10]--;
// 将数值放在正确的位置
arr[position] = num;
}
}
// 主函数
int main() {
std::vector<int> numbers = {170, 45, 75, 90, 802, 24, 2, 66};
size_t maxDigit = getMaxDigits(numbers);
for (size_t digit = 1; digit <= maxDigit; ++digit) {
radixSort(numbers, digit);
}
for (const auto num : numbers) {
std::cout << num << " ";
}
std::cout << "\n";
return 0;
}
```
这个代码首先找出输入数组中最大的数字,确定所需的位数。然后,从最低有效位开始,对每个位进行一次排序,最后输出排序后的结果。注意,这个代码仅支持正整数排序。
阅读全文