/*
* 基数排序
* 思路:就是先准备十个桶,每一个桶就是一个一维数组,十个就定义一个二维数组
* 每个桶的大小就是number.length,因为我们不知道这个桶可能会存多少个数据
* 所以我们做好最坏的打算,就是可能所有的数据都可能存在一个桶中
*/
public int[] RadixSort(int[] number)
{
//先要知道这个数组里面最大数的位数
int max=number[0];
for(int x=0;x<number.length;x++)
{
if(number[x]>max)
{
max=number[x];
}
}
int maxlength=(max+"").length();
//创建桶和保存每个桶存放多少个数据的一维数组
int[][] radix=new int[10][number.length];
int[] count=new int[10];
int index; //这个每个数的每位的大小是什么
for(int x=0,uper=1;x<maxlength;x++,uper*=10)
{
//1. 将每个数据按照规律放好
for(int y=0;y<number.length;y++)
{
index=number[y]/uper%10;
radix[index][count[index]]=number[y]; //这句话就是将这个数放在对应桶的对应位置
count[index]++; //这里的count[index]就是每个桶的存放的数据的个数,所以每一次放进去后要加一
}
//2.然后将数据又放回去
index=0;
for(int i=0;i<count.length;i++)
{
for(int j=0;j<count[i];j++)
{
number[index++]=radix[i][j];
}
count[i]=0;
}
}
return number;
}
基数排序
最新推荐文章于 2022-08-21 17:50:29 发布