问题描述:基数排序的方式可以采用最低位邮箱LSD(Least sgnificant digital)法或最高位邮箱MSD(Most sgnificant digital)法,LSD的排序方式由键值的最右边开始,而MSD相反,由键值的最左边开始,我们这里使用LSD法,原理就是一个数组我们首先根据他的各位进行排序,然后根据十位,百位,这里最多排多少位根据他们的最大值确定。
public int getBit(int num)
{
int bitCount=0;
while(num!=0)
{
num=nums/10;
bitCount++;
}
return bitCount;
}
int bitNum(int num,int bitCount)
{
int currentbit;
while(num!=0)
{
currentbit++;
if(currentbit==bitCount)
{
return num%10;
}
num=num/10;
}
return 0;
}
public bubbleSortBit(int[]nums,int bit)
{
for(int i=0;i<nums.length-1;i++)
{
for(int j=i+1;j<nums.length;j++)
{
if(getBit(nums[j],bit)<getBit(nums[j-1],bit))
{
nums[j]^=nums[j-1];
nums[j-1]^=nums[j];
nums[j]^=nums[j-1];
}
}
}
}
public void LSD(int []nums)
{
int maxNum=nums[0];
for(int i=1;i<nums.length;i++)
{
maxNum=Math.max(maxNum,nums[i]);
}
int bitCount=getBit(maxNum);
for(int i=0;i<bitCount;i++)
{
bubbleSortBit(nums,i+1);
}
}