用c语言实现基数排序 三十个三位数排序
时间: 2023-10-24 09:07:01 浏览: 185
好的,基数排序是一种非比较排序算法,可以用于排序整数类型的数据。下面是用 C 语言实现基数排序的代码,可以对三十个三位数进行排序:
```c
#include <stdio.h>
// 获取一个数的第 d 位数字,d 从低到高编号
int get_digit(int num, int d) {
int pow = 1;
while (d--) {
pow *= 10;
}
return (num / pow) % 10;
}
// 基数排序
void radix_sort(int arr[], int n) {
int digit, i, j, k;
int bucket[10][n]; // 桶的大小为 10,每个桶最多装 n 个数
int count[10]; // 记录每个桶已经装了多少个数
for (digit = 0; digit < 3; digit++) { // 三次分配和收集
// 分配
for (i = 0; i < 10; i++) {
count[i] = 0;
}
for (i = 0; i < n; i++) {
j = get_digit(arr[i], digit);
bucket[j][count[j]++] = arr[i];
}
// 收集
k = 0;
for (i = 0; i < 10; i++) {
for (j = 0; j < count[i]; j++) {
arr[k++] = bucket[i][j];
}
}
}
}
int main() {
int arr[30] = {897, 345, 123, 456, 789, 234, 567, 890, 321, 654,
987, 543, 210, 876, 543, 210, 765, 432, 109, 876,
543, 210, 765, 432, 109, 876, 543, 210, 765, 432};
radix_sort(arr, 30);
for (int i = 0; i < 30; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
上述代码中,`get_digit` 函数可以获取一个数的指定位数字,`radix_sort` 函数是基数排序的核心实现。在主函数中,我们定义了一个包含三十个三位数的数组 `arr`,然后调用 `radix_sort` 函数进行排序,并输出排序后的结果。
需要注意的是,上述代码中的桶大小为 10,这是因为每一位数字的范围都是 0 到 9。在实际应用中,我们需要根据数据的范围来确定桶的大小,以提高排序效率。
阅读全文