基数排序c++设置升序降序
时间: 2023-08-28 15:57:31 浏览: 106
C++语言实现基数排序
4星 · 用户满意度95%
基数排序是一种用于整数排序的非比较排序算法,它将整数按照各个位上的数字进行排序。基数排序可以用于升序或降序排序。下面是一个示例代码,演示了如何使用基数排序算法来实现升序和降序排序:
```cpp
#include <iostream>
#include <vector>
// 获取数字的某一位上的数值
int getDigit(int number, int digit) {
int denominator = 1;
for (int i = 0; i < digit; i++) {
denominator *= 10;
}
return (number / denominator) % 10;
}
// 基数排序函数
void radixSort(std::vector<int>& arr, int digit, bool ascending) {
int maxDigit = 0;
for (int i = 0; i < arr.size(); i++) {
int currentDigit = 0;
int number = arr[i];
while (number != 0) {
number /= 10;
currentDigit++;
}
if (currentDigit > maxDigit) {
maxDigit = currentDigit;
}
}
for (int d = 0; d < maxDigit && d < digit; d++) {
std::vector<std::vector<int>> buckets(10);
for (int i = 0; i < arr.size(); i++) {
int currentDigit = getDigit(arr[i], d);
buckets[currentDigit].push_back(arr[i]);
}
int index = 0;
// 升序排序
if (ascending) {
for (int i = 0; i < buckets.size(); i++) {
for (int j = 0; j < buckets[i].size(); j++) {
arr[index++] = buckets[i][j];
}
}
}
// 降序排序
else {
for (int i = buckets.size() - 1; i >= 0; i--) {
for (int j = buckets[i].size() - 1; j >= 0; j--) {
arr[index++] = buckets[i][j];
}
}
}
}
}
// 打印数组函数
void printArray(const std::vector<int>& arr) {
for (int i = 0; i < arr.size(); i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
int main() {
std::vector<int> arr = {329, 457, 657, 839, 436, 720, 355};
int digit = 3;
std::cout << "原始数组: ";
printArray(arr);
// 使用基数排序进行升序排序
radixSort(arr, digit, true);
std::cout << "升序排序结果: ";
printArray(arr);
// 使用基数排序进行降序排序
radixSort(arr, digit, false);
std::cout << "降序排序结果: ";
printArray(arr);
return 0;
}
```
在上面的代码中,`getDigit` 函数用于获取数字的某一位上的数值。`radixSort` 函数使用基数排序算法对数组进行排序。通过传递 `true` 或 `false` 给 `ascending` 参数,可以设置排序的升序或降序。`printArray` 函数用于打印数组的元素。
注意:这只是一个简单的示例代码,为了方便理解,数组元素直接在代码中定义。在实际应用中,你可能需要修改代码以适应不同的输入方式。
阅读全文