package TestFunctions;
import java.util.Arrays;
public class RadixSort {
static int M=10;
public static void main(String[] args)
{
int[] member= {12,2,34,204,500,6,37,89,159,10};
radixSort(member);
for(int i=0;i<=9;i++)
System.out.println(member[i]);
}
public static void radixSort(int[] member)
{
int dig,k=0,l=0,m=0,i,j;
int [][] array =new int [10] [10];
int [] substitute =new int [10];
Arrays.fill(substitute,0);
Arrays.fill(array,substitute);
for(i=1;i<=M;i++)
{
for(j=0;j<=9;j++)
{
dig=digit(member[j],i);
for(k=0;array[dig][k]!=0;k++)
array[dig][k]=member[j];
}
l=0;
for(m=0;m<=9;m++)
{
for(k=0;array[m][k]!=0;k++)
member[l++]=array[m][k];
}
Arrays.fill(array, 0);
}
}
public static int digit(int mem,int i)
{
while(i>1) {
mem/=10;
i--;
}
return mem%10;
}
}
基数排序不知道哪里有问题,请求更正
写注释的地方就是问题点,Arrays.fill(Object[], Object)可以去看一下源码,你赋值数组的操作很危险Arrays.fill(array,substitute);
public class RadixSort {
static int M=10;
public static void main(String[] args)
{
int[] member= {12,2,34,204,500,6,37,89,159,10};
radixSort(member);
System.out.println(Arrays.toString(member)); // 输出可以使用Arrays.toString()
}
public static void radixSort(int[] member)
{
int dig,i,j; // k、l、m不需要赋值
int [][] array =new int [10] [10]; // int数组默认缺省值就是0,不需要赋值操作
for(i=1;i<=M;i++)
{
for(j=0;j<M;j++) // 定义了常量M没使用
{
dig=digit(member[j],i);
for(int k=0;;) { // 数值添加条件和for循环跳出条件混淆
if (array[dig][k] != 0) {
k++;
} else {
array[dig][k] = member[j];
break;
}
}
}
int l=0;
for(int m=0;m<M;m++) // 定义了常量M没使用
{
for(int k=0;k<M;k++) // 数值添加条件和for循环跳出条件混淆 + 定义了常量M没使用
if (array[m][k]!=0) {
member[l++] = array[m][k];
}
}
array = new int [10] [10]; // 运行报错,这里就想赋值0
}
}
public static int digit(int mem,int i)
{
while(i>1) {
mem/=10;
i--;
}
return mem%10;
}
}