基数计数排序代码C语言实现
时间: 2023-10-26 07:18:58 浏览: 98
以下是基数计数排序的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 radixCountSort(int arr[], int n) {
int exp = 1;
int *output = (int*)malloc(n * sizeof(int));
int max = getMax(arr, n);
while (max / exp > 0) {
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];
}
exp *= 10;
}
free(output);
}
// 打印排序后的数组
void printArr(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]);
radixCountSort(arr, n);
printf("排序后的数组:\n");
printArr(arr, n);
return 0;
}
```
该代码首先定义了一个获取数列中最大值的函数 `getMax`,然后实现了基数计数排序的函数 `radixCountSort`,其中使用了一个输出数组 `output`,在排序过程中不断更新该数组,最后将其赋值回原数组 `arr` 中。最后定义了一个打印排序后的数组的函数 `printArr`,并在 `main` 函数中调用这些函数进行测试。
阅读全文