编辑代码

#include <stdio.h>
void display (int a[],int len){
	for(int i=0;i<len;i++){
		printf("%d ",a[i]);
	} 
	printf("\n");
}
int findMax(int a[],int len){
    int max=a[0];
    for(int i=1;i<len;i++){
        if(max<a[i]){
            max=a[i];
        }
    }
    return max;
}

int cycleNum(int num){
	int ok=0;
	while(1){
		num/=10;
		if(num!=0){
			ok++;
		}
		else{
			ok++;
			break;
		}
	}
	return ok;
}

void radixSort(int a[],int len){
    int cycle=cycleNum(findMax(a,len));
    int weight=10;
    int sub=1;
    while((cycle--)>0){
//    	printf("%d,%d\n",weight,sub);
	    int b[10];
	    int c[10];
	    int d[len];
	    for(int i=0;i<10;i++){
	        b[i]=0;
	        c[i]=0;
	        d[i]=0;
	    }
	    for(int i=0;i<len;i++){
	        b[a[i]%weight/sub]++;
	    }
//	    display(b,10);
	    for(int i=0;i<10;i++){
	        for(int j=i;j>=0;j--){
	            c[i]+=b[j];
	        }
	    }
//	    display(c,10); 
	    for(int i=len-1;i>=0;i--){
	    	c[a[i]%weight/sub]-=1;
	    	d[c[a[i]%weight/sub]]=a[i];
		}
//		display(d,len); 
		for(int i=0;i<len;i++){
			a[i]=d[i];
		}
//		display(a,len); 
//		printf("---\n");
		weight*=10; 
		sub*=10;
	}
	}

int main () {
    int a[]={234324,222,35443,6434,2224,68,54,34543,234,676};
	radixSort(a,sizeof(a)/sizeof(int));
	display(a,sizeof(a)/sizeof(int));
	
    int a1[]={324,35,532,246,2578,0,0,1,23423};
	radixSort(a1,sizeof(a1)/sizeof(int));
	display(a1,sizeof(a1)/sizeof(int));
	
  	int a2[]={3,2,5,6,3,6,8,8,3,3,7,9,0,4,2};
	radixSort(a2,sizeof(a2)/sizeof(int));
	display(a2,sizeof(a2)/sizeof(int));
    
}