基数排序 Java 使用二维数组递归
Radix sort Java using 2 dimensional array recursive
过去几天,我一直在尝试在 Java 中实现基数排序,但我做不好。我知道那里有 arrayLists 的解决方案,但我需要使用二维数组来完成它并递归我的 "homework"。我的问题是,无论如何我都不能将元素放入我的二维数组中。这是我到目前为止得到的:
public class ElfSort{
public static int[] sort(int[] packages, int digit){
//new 2d array with 10 "buckets"
int[][] d=new int[10][];
//temporary array
int[] tmp;
if(digit>=0){
//going through array and try to put each element into a bucket using putIn()
for(int i=0; i<packages.length; i++){
putIn(d[packages[i]/pot(digit)%10],packages[i]);
}
digit--;
for(int i=0; i<10; i++) sort(d[i],digit);
}
for(int i=0; i<10; i++){
tmp=d[i];
for(int j=0; j<tmp.length; j++) packages[j]=tmp[j];
}
return packages;
}
private static int pot(exp){
if(exp==0) return 1;
return 10*pot(exp-1);
}
private static int[] putIn(int[] place, int nr){
int[] nplace=new int[place.length+1];
for(int i=0; i<place.length; i++) nplace[i]=place[i];
nplace[nplace.length-1]=nr;
return nplace;
}
}
所以对于所有为此搜索答案的人,我终于答对了:
public class Elfsort{
public static int[] sort(int[] packages, int digit){
if(packages.length<2) return packages;
if(digit>=0){
int[][] d=new int[10][];
int tmp=-1;
for(int i:packages){
tmp=i/pot(digit);
d[tmp%10]=putIn(d[tmp%10],i);
}
digit--;
int a=0;
for(int i=0; i<10; i++){
sort(d[i],digit);
for(int j:d[i]){
packages[a++]=j;
}
}
}
return packages;
}
}
过去几天,我一直在尝试在 Java 中实现基数排序,但我做不好。我知道那里有 arrayLists 的解决方案,但我需要使用二维数组来完成它并递归我的 "homework"。我的问题是,无论如何我都不能将元素放入我的二维数组中。这是我到目前为止得到的:
public class ElfSort{
public static int[] sort(int[] packages, int digit){
//new 2d array with 10 "buckets"
int[][] d=new int[10][];
//temporary array
int[] tmp;
if(digit>=0){
//going through array and try to put each element into a bucket using putIn()
for(int i=0; i<packages.length; i++){
putIn(d[packages[i]/pot(digit)%10],packages[i]);
}
digit--;
for(int i=0; i<10; i++) sort(d[i],digit);
}
for(int i=0; i<10; i++){
tmp=d[i];
for(int j=0; j<tmp.length; j++) packages[j]=tmp[j];
}
return packages;
}
private static int pot(exp){
if(exp==0) return 1;
return 10*pot(exp-1);
}
private static int[] putIn(int[] place, int nr){
int[] nplace=new int[place.length+1];
for(int i=0; i<place.length; i++) nplace[i]=place[i];
nplace[nplace.length-1]=nr;
return nplace;
}
}
所以对于所有为此搜索答案的人,我终于答对了:
public class Elfsort{
public static int[] sort(int[] packages, int digit){
if(packages.length<2) return packages;
if(digit>=0){
int[][] d=new int[10][];
int tmp=-1;
for(int i:packages){
tmp=i/pot(digit);
d[tmp%10]=putIn(d[tmp%10],i);
}
digit--;
int a=0;
for(int i=0; i<10; i++){
sort(d[i],digit);
for(int j:d[i]){
packages[a++]=j;
}
}
}
return packages;
}
}