代码实现如下:
#include <stdio.h> #include<string.h> int a[100];//桶a可以存放100个元素 int bucket[10][100];//总共有10个桶,每个桶最多可以放入100个元素 int main() { int n; printf("请输入你要放入桶中的元素个数:\n"); scanf_s("%d", &n); printf("开始输入元素:\n"); for (int i = 0; i < n; i++) scanf_s("%d", &a[i]); int d = 1;//d为基数,即:10的d次方 for (int i = 1; i <= 3; i++) {//3位数字所以循环3次 memset(bucket, 0, sizeof(bucket));//每趟排序结束后将桶清空 for (int j = 0; j < n; j++) { int x = a[j] / d % 10;//用来取出个位,十位,百位 bucket[x][0]++;//把找到的某位元素放入,以它(某位)为下标的桶内,目的统计个数 bucket[x][bucket[x][0]] = a[j];//保存当前元素到桶内 } int num = 0;//从桶中取出数字的个数 for (int p = 0; p < 10; p++) { for (int t = 1; t <= bucket[p][0]; t++) { a[num] = bucket[p][t]; num++; } } d *= 10; } for(int i=0;i<n;i++){ printf("%d ", a[i]); } }
05-30
275
12-29
01-01
02-02
412