输入一组位于-100000000~100000000以内的整数,用基数排序算法进行升序排序后,以空格隔开输出结果,C语言实现
时间: 2024-03-26 18:34:05 浏览: 57
基数排序C语言实现
好的,以下是基数排序算法的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 获取指定数字的位数
int getDigit(int num, int digit) {
int i, pow = 1;
for (i = 0; i < digit - 1; i++) {
pow *= 10;
}
return (num / pow) % 10;
}
// 基数排序
void radixSort(int arr[], int n) {
int i, j, k;
int digit = 1, max = arr[0];
int *count, *bucket;
// 获取最大值
for (i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
// 计算最大位数
while (max / 10 > 0) {
digit++;
max /= 10;
}
// 分配桶空间
count = (int *) malloc(sizeof(int) * 10);
bucket = (int *) malloc(sizeof(int) * n);
// 进行排序
for (i = 1; i <= digit; i++) {
// 初始化计数器
for (j = 0; j < 10; j++) {
count[j] = 0;
}
// 统计每个桶中的个数
for (j = 0; j < n; j++) {
count[getDigit(arr[j], i)]++;
}
// 计算桶的边界
for (j = 1; j < 10; j++) {
count[j] += count[j - 1];
}
// 将数据依次装入桶中
for (j = n - 1; j >= 0; j--) {
k = getDigit(arr[j], i);
bucket[count[k] - 1] = arr[j];
count[k]--;
}
// 将桶中数据依次取出,存入原数组
for (j = 0; j < n; j++) {
arr[j] = bucket[j];
}
}
// 释放内存
free(count);
free(bucket);
}
int main() {
int arr[1000], n, i;
// 获取输入数据
printf("请输入待排序的整数个数:");
scanf("%d", &n);
printf("请输入待排序的整数:");
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 进行排序
radixSort(arr, n);
// 输出结果
printf("排序结果为:");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
注意:由于题目要求输入的整数范围极大,为了避免内存溢出,上述代码中最多只能处理1000个整数。如果需要处理更多的数据,需要对代码进行进一步的优化。
阅读全文