基数並べ替え(C言語による実装)

5860 ワード

基数並べ替え(C言語による実装)配列例9445,83,782,2は、最下位に従って、対応するバレルに配置され、得られた.
   0    0    0    0
   0    0    0    0
 782    2    0    0
  83    0    0    0
   0    0    0    0
9445    0    0    0
   0    0    0    0
   0    0    0    0
   0    0    0    0
   0    0    0    0
 782    2   83 9445
また、新たに得られたシーケンスを次のビットに同じ操作を行い、4回循環します.(最大の数字は4桁だけです.)
#include 
#include 
int max(int N[],int n)
{
    int max = 0;
    for(int i=0; iif (N[i]>max)
            max = N[i];
    }
    return max;
}
//          
int main()
{
    int N[5]= {9445,83,782,2};
    int M[5]= {9445,83,782,2};
    int n=4,num = max(N,n);//n     

    int temp[10][n];//  10       

    for(int j=0; num!=0; j++) //  max   
    {
        int index = 0;
        for(int i=0; i<10; i++) //     
            for(int j=0; j0;
        int cot[10]= {0}; //cot[x]   X           
        for(int i=0; i%10][cot[N[i]%10]] = M[i];
            cot[N[i]%10]++;
            N[i]/=10;
        }
//        for(int i=0;i<10;i++)
//        {
//            for(int j=0;j//                printf("%4d ",temp[i][j]);
//            }
//            printf("
"
); // } // temp // for(int i=0; i<10; i++) { for(int k=0; kif (temp[i][k]!=0) { M[index] = temp[i][k]; index++; } } } for(int i=0; i<index; i++) printf("%4d ",M[i]); printf("
"
); for(int i=0; i<index; i++) { N[i] = M[i]/10; for(int k=0; k10; printf("%4d ",N[i]); } printf("
--------------
"
); num/=10; } for(int i=0; iprintf("%d ",M[i]); return 0; }