编辑代码

#include <stdio.h>

int getMax(int arr[], int n) 
{ 
    int mx = arr[0]; 
    for (int i = 1; i < n; i++) 
        if (arr[i] > mx) 
            mx = arr[i]; 
    return mx; 
} 

int Digit(int num){
    int k=0;
    while(num!=0){
        num/=10;
        k++;
    }
    return k;
}

void countSort(int arr[], int n, int exp) 
{ 
    int output[n]; 
    int i, count[10] = {0}; 
  
    for (i = 0; i < n; i++) 
        count[ (arr[i]/exp)%10 ]++; 
  
    for (i = 1; i < 10; i++) 
        count[i] += count[i - 1]; 
  
    for (i = n - 1; i >= 0; i--) 
    { 
        output[count[ (arr[i]/exp)%10 ] - 1] = arr[i]; 
        count[ (arr[i]/exp)%10 ]--; 
    } 
  
    for (i = 0; i < n; i++) 
        arr[i] = output[i]; 
} 
  
void radixsort(int arr[], int n) 
{ 
    int max = getMax(arr, n);
    int k=Digit(max);
    int exp=1;
    for (int i = 1; i< k; i++){
        countSort(arr, n, exp);
        exp*=10;
    } 
         
} 

void printArray(int a[], int len) {
    for (int i = 0; i < len; i++) {
        printf("%d ",a[i]);
    }
}


int main(){
     int a[10] = {789,36,26,27,2,46,4,19,50,48};
    int size=sizeof(a)/sizeof(int);
    radixsort(a,size);
    printArray(a,size);
	return 0;
}