以下是使用C语言编写的桶排序示例:

#include <stdio.h>
#include <stdlib.h>

#define MAX_VALUE 10000
#define MAX_BUCKET_SIZE 100

void bucket_sort(int *arr, int n) {
    int i, j;
    int count[MAX_BUCKET_SIZE] = {0};
    int *bucket = (int*)malloc(sizeof(int) * n);

    for (i = 0; i < n; i++) {
        count[arr[i]]++;
    }

    for (i = 1; i < MAX_BUCKET_SIZE; i++) {
        count[i] += count[i-1];
    }

    for (i = n - 1; i >= 0; i--) {
        bucket[--count[arr[i]]] = arr[i];
    }

    for (i = 0, j = 0; i < n; i++, j++) {
        arr[i] = bucket[j];
    }

    free(bucket);
}

int main() {
    int arr[] = {4, 5, 2, 8, 1, 3, 9, 6, 7, 0};
    int n = sizeof(arr) / sizeof(arr[0]);
    int i;

    printf("Original array:\n");
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    bucket_sort(arr, n);

    printf("Sorted array:\n");
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

代码中使用了MAX_VALUEMAX_BUCKET_SIZE两个常量,分别表示输入数据的最大值和桶的数量,可以根据实际情况进行修改。在函数bucket_sort中,首先统计每个数字出现的次数,然后计算桶的边界,最后将数字放入对应的桶中。最后将桶中的数字按照顺序放回原数组中即可。

C语言实现桶排序算法 - 代码示例及详解

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

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