C语言编写一段基数排序对一组3位数进行排序
时间: 2023-07-27 20:22:51 浏览: 93
以下是一段使用基数排序对一组3位数进行排序的C代码:
```c
#include <stdio.h>
void radix_sort(int arr[], int n) {
int bucket[10][n];
int count[10];
int digit = 0;
int max_num = arr[0];
int i, j, k;
// 计算最大值和位数
for (i = 0; i < n; i++) {
if (arr[i] > max_num) {
max_num = arr[i];
}
}
while (max_num > 0) {
digit++;
max_num /= 10;
}
// 对每一位进行排序
for (i = 0; i < digit; i++) {
// 每一轮开始前清空桶和计数器
for (j = 0; j < 10; j++) {
count[j] = 0;
}
// 将数字放入桶中
for (j = 0; j < n; j++) {
int index = (arr[j] / (int)pow(10, i)) % 10;
bucket[index][count[index]] = arr[j];
count[index]++;
}
// 将桶中的数字复制回原数组
k = 0;
for (j = 0; j < 10; j++) {
for (int l = 0; l < count[j]; l++) {
arr[k++] = bucket[j][l];
}
}
}
}
int main() {
int arr[] = {321, 108, 589, 304, 123, 573, 437};
int n = sizeof(arr) / sizeof(arr[0]);
radix_sort(arr, n);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在这个例子中,我们定义了一个`radix_sort`函数来对一个`int`类型的数组进行排序。首先,我们计算出最大值和数字位数。然后,我们使用桶和计数器对每个数字的每个位数进行排序。在每一轮排序中,我们将数字放入10个桶中,根据当前位数的值将数字分配到桶中。然后,我们按照桶的顺序将数字复制回原始数组中,并重复此过程直到排序完成。最后,我们在`main`函数中调用`radix_sort`并输出排序后的结果。
阅读全文