使用容器c++链式基数排序
链式基数排序是一种基于桶排序的排序算法,它是通过将待排序的元素分配到不同的桶中,然后对每个桶中的元素进行排序,最后将所有桶中的元素按照顺序合并得到有序序列。
下面是使用C++实现链式基数排序的示例代码:
#include <iostream>
#include <vector>
using namespace std;
// 获取数字num的第index位的值
int getDigit(int num, int index) {
int digit = 0;
for (int i = 0; i <= index; i++) {
digit = num % 10;
num /= 10;
}
return digit;
}
// 链式基数排序
void radixSort(vector<int>& arr) {
int maxNum = *max_element(arr.begin(), arr.end()); // 获取数组中的最大值
int maxDigits = to_string(maxNum).length(); // 获取最大值的位数
vector<vector<int>> buckets(10); // 创建10个桶,每个桶存放一个数字
for (int i = 0; i < maxDigits; i++) {
// 将每个元素按照当前位的值放入对应的桶中
for (int num : arr) {
int digit = getDigit(num, i);
buckets[digit].push_back(num);
}
// 将桶中的元素按顺序取出,更新原数组
int index = 0;
for (vector<int>& bucket : buckets) {
for (int num : bucket) {
arr[index++] = num;
}
bucket.clear(); // 清空桶中的元素
}
}
}
int main() {
vector<int> arr = { 170, 45, 75, 90, 802, 24, 2, 66 };
radixSort(arr);
cout << "排序后的数组:";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
return 0;
}
在上述代码中,首先通过getDigit函数获取数字的某一位的值。然后,创建10个桶,每个桶存放一个数字。在每一轮循环中,将数组中的元素按照当前位的值放入对应的桶中。接着,将每个桶中的元素按照顺序取出,更新原数组。重复上述操作,直到所有位都被处理完毕。最后,输出排序后的数组。
以上就是使用C++实现链式基数排序的示例代码
原文地址: http://www.cveoy.top/t/topic/iUyS 著作权归作者所有。请勿转载和采集!