生成一个桶排序算法C语言
时间: 2024-09-21 11:06:46 浏览: 45
C语言桶排序
5星 · 资源好评率100%
当然,桶排序是一种非比较型整数排序算法,它将输入数据分布到有限数量的桶里,然后对每个桶分别进行排序,最后合并所有桶的结果。以下是简单的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_BUCKET 100
void bucketSort(int arr[], int n) {
// 创建空桶数组
int* buckets[MAX_BUCKET] = {0};
for (int i = 0; i < MAX_BUCKET; i++) {
buckets[i] = malloc(sizeof(int));
memset(buckets[i], 0, sizeof(int));
}
// 将元素分配到相应的桶中
for (int i = 0; i < n; i++) {
int index = arr[i] % MAX_BUCKET;
buckets[index]++;
}
// 对每个桶内的元素单独排序
for (int i = 0; i < MAX_BUCKET; i++) {
if (buckets[i]) {
int temp[n];
int j = 0;
for (int k = 0; k < n; k++) {
if (arr[k] == i || buckets[i]) {
temp[j++] = arr[k];
buckets[i]--;
}
}
// 递归或者选择合适的排序方法对当前桶进行排序
bucketSort(temp, j);
// 把排序后的元素放回原数组
for (int k = 0; k < j; k++) {
arr[k + i * MAX_BUCKET / n] = temp[k];
}
}
}
// 清理bucket数组
for (int i = 0; i < MAX_BUCKET; i++) {
free(buckets[i]);
}
}
// 测试函数
int main() {
int arr[] = {5, 9, 1, 7, 3, 6, 8, 2, 4};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Before sorting: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
bucketSort(arr, n);
printf("\nAfter sorting: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
阅读全文