链式基数排序是一种基于桶排序的排序算法,它是通过将待排序的元素分配到不同的桶中,然后对每个桶中的元素进行排序,最后将所有桶中的元素按照顺序合并得到有序序列。

下面是使用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++实现链式基数排序的示例代码

使用容器c++链式基数排序

原文地址: http://www.cveoy.top/t/topic/iUyS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录