基数排序是一种非比较排序算法,它通过将待排序数据按照位数切割成不同的数字,然后按照每个位数分别进行排序,最终得到有序的数据。基数排序的时间复杂度为O(d*(n+k)),其中d是最大数的位数,k是进制数。

以下是基数排序的c++代码实现:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void radixSort(vector<int>& arr) {
    int maxElement = *max_element(arr.begin(), arr.end()); // 获取数组中的最大值
    int digit = 1; // 初始化位数为1
    while (maxElement / digit > 0) { // 当最大值的位数大于等于当前位数时,继续排序
        vector<int> count(10, 0); // 初始化计数数组
        vector<int> temp(arr.size(), 0); // 初始化临时数组
        for (int i = 0; i < arr.size(); i++) { // 统计每个桶中的元素个数
            count[(arr[i] / digit) % 10]++;
        }
        for (int i = 1; i < count.size(); i++) { // 将计数数组中的数字累加
            count[i] += count[i - 1];
        }
        for (int i = arr.size() - 1; i >= 0; i--) { // 将元素按照位数放入桶中
            temp[count[(arr[i] / digit) % 10] - 1] = arr[i];
            count[(arr[i] / digit) % 10]--;
        }
        arr = temp; // 将临时数组赋值给原数组,进行下一轮排序
        digit *= 10; // 位数乘以10
    }
}

int main() {
    vector<int> arr{ 170, 45, 75, 90, 802, 24, 2, 66 };
    radixSort(arr);
    for (int i = 0; i < arr.size(); i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
    return 0;
}

在上述代码中,我们首先获取数组中的最大值,并根据最大值的位数来进行排序。每次排序都会统计每个桶中的元素个数,然后将计数数组中的数字累加。接着,我们将元素按照位数放入桶中,最后将临时数组赋值给原数组,进行下一轮排序。最终,我们输出排好序的数组

整数型简单的c++基数排序

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

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