Привет всем Мне нужно написать алгоритм сортировки RADIX для произвольного количества цифр и значений. Я полагал, что было бы проще использовать LL для управления, а не для массивов для хранения значений 0-9. Я думаю, что было бы лучше использовать рекурсию, чтобы решить эту проблему, но им с трудностями и получать ошибкиКак вы определяете цифру для сортировки radix
Exception in thread "main" java.lang.StackOverflowError
at java.util.LinkedList$Node.<init>(Unknown Source)
at java.util.LinkedList.linkLast(Unknown Source)
at java.util.LinkedList.add(Unknown Source)
я бы очень признателен за любые рекомендации! :)
import java.util.LinkedList;
import java.util.Scanner;
public class pt2 {
long[] mine;
int digits;
Scanner sn = new Scanner(System.in);
public pt2() {
makeArray();
add();
RADIX(mine,1);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
void RADIX(int[] kiki, int digi){
while(digi<=digits){
LinkedList<Integer> l0 = new LinkedList<Integer>();
LinkedList<Integer> l1 = new LinkedList<Integer>();
LinkedList<Integer> l2 = new LinkedList<Integer>();
LinkedList<Integer> l3 = new LinkedList<Integer>();
LinkedList<Integer> l4 = new LinkedList<Integer>();
LinkedList<Integer> l5 = new LinkedList<Integer>();
LinkedList<Integer> l6 = new LinkedList<Integer>();
LinkedList<Integer> l7 = new LinkedList<Integer>();
LinkedList<Integer> l8 = new LinkedList<Integer>();
LinkedList<Integer> l9 = new LinkedList<Integer>();
LinkedList[] cap ={l0,l1,l2,l3,l4,l5,l6,l7,l8,l9};
for(int j=0;j<kiki.length;j++){
int k=0;
while(k<10){
//need to put the number in the correct LL but how
int jk = digital(kiki[j],(int)(Math.pow(10,digi)));
if(jk==k){
cap[k].add(kiki[j]);
k=11;
}
k++;
}
}
int i = 0;
while(i<kiki.length){
int p=0;
while(p<10){
while(cap[p].isEmpty()==false){
kiki[i]=(int) cap[p].removeFirst();
}
p++;
}
i++;
}
digi++;
}
}
public int digital(int num, int pos){
int i = (int) (num % Math.pow(10,pos));
i= (int)(i/Math.pow(10, pos-1));
return i;
}
void add(){
int i=0;
while(i<mine.length){
mine[i] = (long)(Math.random()*digits);
i++;
}
}
void makeArray(){
System.out.println("Max size?");
mine = new long[sn.nextInt()];
System.out.println("Max digits?);
if(digits<0){
System.out.println("bad USer");
}else{
digits = sn.nextInt();
}
}
}
теперь это возвращает
Максимальный размер? Макс. Цифры? Не рассотртировано
Сортировано 49 63 87 52 1 99 10 74 67 49 Конец
Я храню их в крышке LinkedList []. – user1766795