1000个数C语言基数排序
时间: 2024-01-26 22:04:56 浏览: 29
好的,以下是一个基于C语言的基数排序算法,可以处理1000个数:
```c
#include <stdio.h>
// 获取数组a中第n位的数字
int getDigit(int a[], int n, int digit) {
return (a[n] / digit) % 10;
}
// 基数排序函数
void radixSort(int a[], int n) {
int i, j, digit = 1;
int tmp[n], count[10] = {0};
// 获取最大值
int max = a[0];
for (i = 1; i < n; i++) {
if (a[i] > max) {
max = a[i];
}
}
// 进行排序
while (max / digit > 0) {
// 清空计数器
for (i = 0; i < 10; i++) {
count[i] = 0;
}
// 统计每个桶中的元素个数
for (i = 0; i < n; i++) {
count[getDigit(a, i, digit)]++;
}
// 计算桶中元素在tmp数组中的位置
for (i = 1; i < 10; i++) {
count[i] += count[i-1];
}
// 将元素存储到tmp数组中
for (i = n-1; i >= 0; i--) {
j = getDigit(a, i, digit);
tmp[count[j]-1] = a[i];
count[j]--;
}
// 将tmp数组中的元素复制到a数组中
for (i = 0; i < n; i++) {
a[i] = tmp[i];
}
// 位数增加
digit *= 10;
}
}
int main() {
int a[1000], n, i;
// 读取n和数组a
printf("请输入n:");
scanf("%d", &n);
printf("请输入数组a:\n");
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 进行基数排序
radixSort(a, n);
// 输出结果
printf("排序结果为:\n");
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
希望能够帮助到你。