覺得這個排序法挺酷的,所以就把它實作出來了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int a,b,i;

void radix(int n[],int l){
int op[l],s[l];//op use to calculate and s use to store
int base=1,j,loc,times=1;
while(base<=b){
//sort
for(i=0;i<l;i++){op[i]=n[i]/base;}
base*=10;loc=0;
for(i=0;i<=9;i++){
for(j=0;j<l;j++){
if(op[j]%10==i){s[loc++]=n[j];}
}
}
//s cover n
for(i=0;i<l;i++){n[i]=s[i];}
//print array n
printf("照倒數第%d位排序的結果:\n",times++);
for(i=0;i<l;i++){
printf("[%2d]%6d ",i,n[i]);
if(i%5==4){printf("\n");}
}
}
}

int main(){
printf("請輸入數量:");
scanf("%d",&a);
printf("請輸入基值:");
scanf("%d",&b);
int n[a];
srand((unsigned)time(NULL));
for(i=0;i<a;i++){
n[i]=rand()%b+1;
printf("[%2d]%6d ",i,n[i]);
if(i%5==4){printf("\n");}
}
radix(n,a);
return 0;
}

結果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
請輸入數量:20
請輸入基值:56789
[ 0] 33490 [ 1] 56468 [ 2] 35101 [ 3] 48629 [ 4] 51644
[ 5] 23686 [ 6] 37666 [ 7] 3735 [ 8] 17334 [ 9] 46229
[10] 29694 [11] 45835 [12] 24799 [13] 22631 [14] 48486
[15] 40838 [16] 32113 [17] 35659 [18] 7664 [19] 4089
照倒數第1位排序的結果:
[ 0] 33490 [ 1] 35101 [ 2] 22631 [ 3] 32113 [ 4] 51644
[ 5] 17334 [ 6] 29694 [ 7] 7664 [ 8] 3735 [ 9] 45835
[10] 23686 [11] 37666 [12] 48486 [13] 56468 [14] 40838
[15] 48629 [16] 46229 [17] 24799 [18] 35659 [19] 4089
照倒數第2位排序的結果:
[ 0] 35101 [ 1] 32113 [ 2] 48629 [ 3] 46229 [ 4] 22631
[ 5] 17334 [ 6] 3735 [ 7] 45835 [ 8] 40838 [ 9] 51644
[10] 35659 [11] 7664 [12] 37666 [13] 56468 [14] 23686
[15] 48486 [16] 4089 [17] 33490 [18] 29694 [19] 24799
照倒數第3位排序的結果:
[ 0] 4089 [ 1] 35101 [ 2] 32113 [ 3] 46229 [ 4] 17334
[ 5] 56468 [ 6] 48486 [ 7] 33490 [ 8] 48629 [ 9] 22631
[10] 51644 [11] 35659 [12] 7664 [13] 37666 [14] 23686
[15] 29694 [16] 3735 [17] 24799 [18] 45835 [19] 40838
照倒數第4位排序的結果:
[ 0] 40838 [ 1] 51644 [ 2] 32113 [ 3] 22631 [ 4] 33490
[ 5] 23686 [ 6] 3735 [ 7] 4089 [ 8] 24799 [ 9] 35101
[10] 35659 [11] 45835 [12] 46229 [13] 56468 [14] 17334
[15] 7664 [16] 37666 [17] 48486 [18] 48629 [19] 29694
照倒數第5位排序的結果:
[ 0] 3735 [ 1] 4089 [ 2] 7664 [ 3] 17334 [ 4] 22631
[ 5] 23686 [ 6] 24799 [ 7] 29694 [ 8] 32113 [ 9] 33490
[10] 35101 [11] 35659 [12] 37666 [13] 40838 [14] 45835
[15] 46229 [16] 48486 [17] 48629 [18] 51644 [19] 56468

封面圖源:觸站3