采用C++算法满足一个数组采用基数排序从小到大和从大到小排序
时间: 2024-04-16 07:25:58 浏览: 152
用C++语言基数排序算法实现
4星 · 用户满意度95%
对于基数排序,它是一种非比较排序算法,可以用于从小到大或从大到小排列一个数组。我将给出两种不同的C++算法实现。
首先是从小到大排序的基数排序算法实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 获取指定位数上的数字
int getDigit(int num, int digit) {
return (num / digit) % 10;
}
// 基数排序函数
void radixSortAscending(vector<int>& nums) {
int maxNum = *max_element(nums.begin(), nums.end()); // 获取数组中的最大值
for (int digit = 1; maxNum / digit > 0; digit *= 10) {
vector<vector<int>> buckets(10); // 创建10个桶
// 将数字放入对应的桶中
for (int num : nums) {
int bucketIndex = getDigit(num, digit);
buckets[bucketIndex].push_back(num);
}
// 从桶中取出数字重新组成数组
int index = 0;
for (vector<int>& bucket : buckets) {
for (int num : bucket) {
nums[index++] = num;
}
bucket.clear();
}
}
}
int main() {
vector<int> nums = {170, 45, 75, 90, 802, 24, 2, 66};
radixSortAscending(nums);
cout << "从小到大排序结果:";
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
然后是从大到小排序的基数排序算法实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 获取指定位数上的数字
int getDigit(int num, int digit) {
return (num / digit) % 10;
}
// 基数排序函数
void radixSortDescending(vector<int>& nums) {
int maxNum = *max_element(nums.begin(), nums.end()); // 获取数组中的最大值
for (int digit = 1; maxNum / digit > 0; digit *= 10) {
vector<vector<int>> buckets(10); // 创建10个桶
// 将数字放入对应的桶中
for (int num : nums) {
int bucketIndex = getDigit(num, digit);
buckets[bucketIndex].push_back(num);
}
// 从桶中取出数字重新组成数组(从后往前)
int index = nums.size() - 1;
for (int i = buckets.size() - 1; i >= 0; i--) {
for (int num : buckets[i]) {
nums[index--] = num;
}
buckets[i].clear();
}
}
}
int main() {
vector<int> nums = {170, 45, 75, 90, 802, 24, 2, 66};
radixSortDescending(nums);
cout << "从大到小排序结果:";
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
以上是两种基数排序算法的C++实现,分别满足从小到大和从大到小排序的需求。你可以根据自己的需要选择其中一种算法使用。
阅读全文