基数並べ替え(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;
}