#include<stdio.h>
#include<stdlib.h>
void show(int*arr,int size) {
int i;
for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
void basic_num_sort(int*arr,int size){
int i = 0,j,temp,k,m,n;
int** K = (int**)malloc(10 * sizeof(int*));
if (K == NULL) {
printf("malloc failed\n");
return;
}
for (i = 0; i < size; i++) {
K[i] = (int*)calloc(size , sizeof(int));//注意初始值为零
if (K[i] == NULL) {
printf("K[%d]calloc failed\n",i);
for (int l = 0; l < i; l++) {
free(K[l]);
}
free(K);
return;
}
}
for (n = 1; n <= 10000; n = n * 10) {
//int K[10][10] = { 0 };
for (i = 0; i < size;i++) {
m = (arr[i] / n) % 10;
K[m][i] = arr[i];
}
k = 0;
for (i = 0; i < 10; i++) {
for (j = 0; j < size; j++) {
if (K[i][j] != 0) {
arr[k] = K[i][j];
K[i][j] = 0;
k++;
}
}
}
printf("按第%d位排序后",n);
show(arr,size);
}
for (i = 0; i < size; i++) {
free(K[i]);
}
free(K);
}
int main() {
int arr[13] = {5,2,1,32,8,652,11,9,1002,101,63,3,10010};
basic_num_sort(arr, sizeof(arr) / sizeof(int));
return 0;
}