#include<stdio.h>
#include<math.h>
int main()
{
int Seek_Max(int array[],int n);
void RadixSort(int array[],int power,int n,int result[],int max);
int array[10] = {15,12,3,8,480,120,45,23,9856,1};
int result[10] = { };
int max = Seek_Max(array,10);
RadixSort(array,0,10,result,max);
for(int iter = 0;iter < 10;iter ++)
{
printf("%d ",result[iter]);
}
return 0;
}
void RadixSort(int array[],int power,int n,int result[],int max)
{
int row_index;
int Bucket_array[10][10] = {};
int div = pow(10,power);
int temp[10] = {};
for(int iter = 0;iter < n;iter ++)
{
row_index = array[iter]/div%10;
for(int jter = 0;jter < n;jter ++)
{
if(Bucket_array[row_index][jter] == 0)
{
Bucket_array[row_index][jter] = array[iter];
break;
}
}
}
int flag = 0;
for(int iter = 0;iter < 10;iter ++)
{
for(int jter = 0;jter < 10;jter ++)
{
if(Bucket_array[iter][jter] != 0)
{
result[flag] = Bucket_array[iter][jter];
temp[flag] = Bucket_array[iter][jter];
flag ++;
}
}
}
if(power == max - 1)
{
return ;
}
RadixSort(temp,power + 1,n,result,max);
}
int Seek_Max(int array[],int n)
{
int flag;
int max = 0;
int array_temp[10];
for(int iter = 0;iter < n;iter ++)
{
array_temp[iter] = array[iter];
}
for(int iter = 0;iter < n;iter ++)
{
flag = 0;
while(1)
{
array_temp[iter] = array_temp[iter]/10;
flag ++;
if(array_temp[iter] == 0)
{
break;
}
}
if(max < flag)
{
max = flag;
}
}
return max;
}
one algorithm a day keeps the doctor away -- RadixSort
最新推荐文章于 2023-11-11 09:00:00 发布