c语言桶排序代码海量数据
时间: 2024-09-07 15:06:10 浏览: 101
在C语言中,桶排序(Bucket Sort)是一种非比较型整数排序算法,它通过将元素分布到相等大小的“桶”中,然后对每个桶里的元素独立地进行排序,最后合并所有桶的内容得到有序序列。对于海量数据,桶排序假设输入数据范围相对较小,可以有效地处理。
下面是一个简单的C语言桶排序的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
void insertion_sort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
void bucket_sort(int arr[], int n, int range) {
int buckets[range] = {0}; // 初始化空桶数组
for (int i = 0; i < n; i++)
buckets[(arr[i] % range)]++; // 将元素放入对应的桶
int index = 0;
for (int i = 0; i < range; i++) {
for (int j = 0; j < buckets[i]; j++)
arr[index++] = i; // 遍历桶中的元素并添加到排序后的数组
}
insertion_sort(arr, n); // 对所有元素应用插入排序
}
int main() {
int arr[] = {54, 26, 93, 17, 77, 31, 44, 55, 20};
int n = sizeof(arr) / sizeof(arr[0]);
int range = MAX(arr) - MIN(arr) + 1;
printf("Original array: ");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
bucket_sort(arr, n, range);
printf("\nSorted array: ");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
```
阅读全文