你可以用c语言写一段基数排序的代码吗?
时间: 2024-04-19 13:23:59 浏览: 15
当然可以!下面是一段用C语言编写的基数排序代码示例:
```c
#include <stdio.h>
// 获取数组中的最大值
int getMax(int arr[], int n) {
int max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
// 使用计数排序对数组进行排序
void countSort(int arr[], int n, int exp) {
int output[n]; // 存储排序后的结果
int count[10] = {0}; // 计数数组,用于计算每个数字的出现次数
// 统计每个数字的出现次数
for (int i = 0; i < n; i++) {
count[(arr[i] / exp) % 10]++;
}
// 计算累加次数,以确定每个数字的正确位置
for (int i = 1; i < 10; i++) {
count[i] += count[i - 1];
}
// 构建排序后的结果数组
for (int i = n - 1; i >= 0; i--) {
output[count[(arr[i] / exp) % 10] - 1] = arr[i];
count[(arr[i] / exp) % 10]--;
}
// 将排序后的结果复制到原始数组中
for (int i = 0; i < n; i++) {
arr[i] = output[i];
}
}
// 基数排序函数
void radixSort(int arr[], int n) {
// 找到数组中的最大值
int max = getMax(arr, n);
// 对每个位数应用计数排序
for (int exp = 1; max / exp > 0; exp *= 10) {
countSort(arr, n, exp);
}
}
// 测试基数排序算法
int main() {
int arr[] = {170, 45, 75, 90, 802, 24, 2, 66};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
radixSort(arr, n);
printf("\n排序后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
这段代码实现了基数排序算法,它可以对给定的数组进行排序。你可以将待排序的数字存储在`arr`数组中,然后通过调用`radixSort(arr, n)`函数进行排序,其中`n`是数组的大小。排序后的结果将会保存在原始数组`arr`中。
请注意,这只是一个简单的基数排序实现示例,可能不适用于所有情况。在实际编程中,你可能需要根据具体需求进行适当的修改和扩展。