用C实现:描述 用基数排序算法,对-1000000 ~1000000以内的整数,进行升序排序。 输入描述 输入一组整数,数字之间以空格隔开。 输出描述 按照升序顺序输出结果,数字之间以空格隔开。
时间: 2024-02-18 21:00:34 浏览: 207
基数排序C语言实现
好的,下面是使用C语言实现的基数排序算法代码。基数排序算法的实现和Python实现类似,只是需要手动处理字符串和数字之间的转换。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 1000000
// 基数排序算法
void radix_sort(int *arr, int n) {
// 求最大值和最小值
int max_val = arr[0], min_val = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max_val) max_val = arr[i];
if (arr[i] < min_val) min_val = arr[i];
}
// 将所有数字转化为相同位数
char str_n[20], str_min_val[20];
sprintf(str_n, "%d", max_val - min_val);
sprintf(str_min_val, "%d", min_val);
int len = strlen(str_n);
char **str_arr = (char **)malloc(n * sizeof(char *));
for (int i = 0; i < n; i++) {
char *str = (char *)malloc((len + 1) * sizeof(char));
sprintf(str, "%d", arr[i] - min_val);
int str_len = strlen(str);
for (int j = 0; j < len - str_len; j++) {
char *temp = (char *)malloc((str_len + 2) * sizeof(char));
strcpy(temp, "0");
strcat(temp, str);
free(str);
str = temp;
}
str_arr[i] = str;
}
// 从最低位开始排序
for (int i = len - 1; i >= 0; i--) {
// 计数排序
int count[10] = {0};
for (int j = 0; j < n; j++) {
count[str_arr[j][i] - '0']++;
}
for (int j = 1; j < 10; j++) {
count[j] += count[j-1];
}
int *res = (int *)malloc(n * sizeof(int));
for (int j = n - 1; j >= 0; j--) {
int index = str_arr[j][i] - '0';
res[--count[index]] = arr[j];
}
// 将当前位排序后的结果复制到原始数组中
for (int j = 0; j < n; j++) {
arr[j] = res[j];
free(str_arr[j]);
}
free(res);
}
free(str_arr);
}
int main() {
// 输入
int n, arr[MAX_N];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 排序
radix_sort(arr, n);
// 输出
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
这是一个完整的C语言程序,你可以将其保存为一个文件,例如radix_sort.c,使用gcc编译器进行编译,例如:
```
gcc radix_sort.c -o radix_sort
```
然后运行程序,输入一组整数,即可得到排序后的结果。
阅读全文