运用C++对自定义数组采用基数排序从小到大和从大到小进行排序
时间: 2024-04-16 20:24:55 浏览: 152
c++对数组的排序
当然可以!基数排序是一种非常高效的排序算法,可以用于对自定义数组进行排序。以下是使用C++实现基数排序的代码示例:
```cpp
#include <iostream>
using namespace std;
// 获取数组中最大的数字
int getMax(int arr[], int n) {
int max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max)
max = arr[i];
}
return max;
}
// 使用计数排序根据当前位进行排序
void countingSort(int arr[], int n, int exp, bool ascending) {
const int RANGE = 10; // 数字的范围为0-9
int output[n];
int count[RANGE] = {0};
// 统计每个数字出现的次数
for (int i = 0; i < n; i++)
count[(arr[i] / exp) % 10]++;
// 计算每个数字在输出数组中的位置
if (ascending) {
for (int i = 1; i < RANGE; i++)
count[i] += count[i - 1];
} else {
for (int i = RANGE - 2; i >= 0; i--)
count[i] += count[i + 1];
}
// 将数字按照当前位的顺序放入输出数组中
for (int i = n - 1; i >= 0; i--) {
output[count[(arr[i] / exp) % 10] - 1] = arr[i];
count[(arr[i] / exp) % 10]--;
}
// 将输出数组复制到原始数组中
for (int i = 0; i < n; i++)
arr[i] = output[i];
}
// 基数排序函数
void radixSort(int arr[], int n, bool ascending) {
int max = getMax(arr, n);
// 对每个位数进行计数排序
for (int exp = 1; max / exp > 0; exp *= 10)
countingSort(arr, n, exp, ascending);
}
// 打印数组
void printArray(int arr[], int n) {
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
}
int main() {
int arr[] = {170, 45, 75, 90, 802, 24, 2, 66};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "原始数组:";
printArray(arr, n);
cout << "从小到大排序:";
radixSort(arr, n, true);
printArray(arr, n);
cout << "从大到小排序:";
radixSort(arr, n, false);
printArray(arr, n);
return 0;
}
```
这段代码首先定义了 `getMax` 函数,用于获取数组中的最大值。然后定义了 `countingSort` 函数,使用计数排序根据当前位进行排序。最后定义了 `radixSort` 函数,用于执行基数排序。
在 `main` 函数中,我们创建一个自定义数组 `arr`,并打印原始数组。然后分别调用 `radixSort` 函数进行从小到大和从大到小的排序,并打印排序结果。
希望这能帮到你!如果有任何问题,请随时提问。
阅读全文