用C语言实现基数计数排序
时间: 2024-01-21 19:45:20 浏览: 80
基数排序C语言实现
以下为使用C语言实现基数计数排序的代码:
```c
#include <stdio.h>
#include <stdlib.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 radixCountingSort(int arr[], int n) {
int max = getMax(arr, n); // 求出数组中最大的数
int exp = 1; // 初始位数为1
int *count = (int*)malloc(sizeof(int) * 10); // 计数数组
int *output = (int*)malloc(sizeof(int) * n); // 输出数组
while (max / exp > 0) {
// 初始化计数数组
for (int i = 0; i < 10; i++) {
count[i] = 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];
}
// 位数增加
exp *= 10;
}
free(count);
free(output);
}
// 输出数组中的元素
void printArray(int arr[], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = { 170, 45, 75, 90, 802, 24, 2, 66 };
int n = sizeof(arr) / sizeof(arr[0]);
printf("原数组:\n");
printArray(arr, n);
radixCountingSort(arr, n);
printf("排序后的数组:\n");
printArray(arr, n);
return 0;
}
```
使用方法:
1. 将上述代码保存为一个名为`radix_counting_sort.c`的文件;
2. 打开终端或命令行窗口,进入代码所在的目录;
3. 输入以下命令编译代码:`gcc radix_counting_sort.c -o radix_counting_sort`;
4. 输入以下命令运行程序:`./radix_counting_sort`。
程序运行结果如下:
```
原数组:
170 45 75 90 802 24 2 66
排序后的数组:
2 24 45 66 75 90 170 802
```
阅读全文