体验CSDN AI模型生成基数排序C++版

  • 基数排序(Radix Sort)是一种非比较型的排序算法,它根据数字的每一位进行排序。以下是一个基数排序的C++实现示例:
#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 countSort(int arr[], int n, int exp) {
    
    
    int output[n];
    int count[10] = {
    
    0};

    // 统计每个数字出现的次数
    for (int i = 0; i < n; i++) {
    
    
        count[(arr[i] / exp) % 10]++;
    }

    // 将count[i]更新为包含i的元素个数
    for (int i = 1; i < 10; 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) {
    
    
    int max = getMax(arr, n);

    // 对每个位数进行计数排序
    for (int exp = 1; max / exp > 0; exp *= 10) {
    
    
        countSort(arr, n, exp);
    }
}

// 打印数组元素
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]);
    radixSort(arr, n);
    cout << "RadixSorted Array:" << endl;
    printArray(arr, n);
    return 0;
}
C:\Users\Administrator\CLionProjects\untitled1\cmake-build-debug\untitled1.exe
RadixSorted Array:
2 24 45 66 75 90 170 802

Process finished with exit code 0
  • 这是一个简单的基数排序实现示例,通过计数排序对数组按照每个位数进行排序。在主函数中,我们定义一个待排序的数组arr,然后调用radixSort函数对数组进行排序。最后,我们打印排序后的数组。
  • 希望这个示例能够帮助到你!

猜你喜欢

转载自blog.csdn.net/m0_38127487/article/details/132213452