C语言实现桶排序算法 - 代码示例及详解
以下是使用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_VALUE和MAX_BUCKET_SIZE两个常量,分别表示输入数据的最大值和桶的数量,可以根据实际情况进行修改。在函数bucket_sort中,首先统计每个数字出现的次数,然后计算桶的边界,最后将数字放入对应的桶中。最后将桶中的数字按照顺序放回原数组中即可。
原文地址: https://www.cveoy.top/t/topic/nyTr 著作权归作者所有。请勿转载和采集!