Для домашней работы в классе алгоритмов нам пришлось написать программу, которая реализовала алгоритм сортировки Radix. Я закончил тем, что реализовал его в раунде, и он функционирует правильно. Однако есть часть моего кода, который является ужасным, если else блокируется в цикле for. Я должен получить элементы из массива связанных списков в правильном порядке и добавить элементы обратно в массив Integer. Один из моих одноклассников, и я потратил немало времени, пытаясь понять, как включить этот блок в циклы, но просто не мог придумать это. Итак, это мои вопросы, как бы поместить объекты связанных списков в массив в другой массив. Код, который я придумал для метода сортировки ниже:Java: как выполнить итерацию по массиву типов связанных списков и добавить их в массив
private static Integer[] sort(Integer[] input, int place){
//create an array of linked lists
LinkedList<Integer>[] bucketsOut = new LinkedList[10];
//initialize the linked lists
for(int i=0; i < 10; i++){
bucketsOut[i] = new LinkedList<Integer>();
}
int bucketPlacement = 0;
//place every input into the correct bucket
for(int i = 0; i < input.length; i++){
bucketPlacement = getDigit(input[i].intValue(), place);
bucketsOut[bucketPlacement].add(input[i]);
}
//Place the elements out of the linked lists into the correct place in input[]
for(int i = 0; i < input.length; i++){ //for each input number
if(bucketsOut[0].peekFirst() != null){
input[i] = bucketsOut[0].pollFirst().intValue();
}else if(bucketsOut[1].peekFirst() != null){
input[i] = bucketsOut[1].pollFirst().intValue();
}else if(bucketsOut[2].peekFirst() != null){
input[i] = bucketsOut[2].pollFirst().intValue();
}else if(bucketsOut[3].peekFirst() != null){
input[i] = bucketsOut[3].pollFirst().intValue();
}else if(bucketsOut[4].peekFirst() != null){
input[i] = bucketsOut[4].pollFirst().intValue();
}else if(bucketsOut[5].peekFirst() != null){
input[i] = bucketsOut[5].pollFirst().intValue();
}else if(bucketsOut[6].peekFirst() != null){
input[i] = bucketsOut[6].pollFirst().intValue();
}else if(bucketsOut[7].peekFirst() != null){
input[i] = bucketsOut[7].pollFirst().intValue();
}else if(bucketsOut[8].peekFirst() != null){
input[i] = bucketsOut[8].pollFirst().intValue();
}else if(bucketsOut[9].peekFirst() != null){
input[i] = bucketsOut[9].pollFirst().intValue();
}
}
//return sorted list for digit
return input;
}
Вы извлекаете первый элемент из всех массивов, а затем возвращаетесь ко второму элементу во всех массивах. Это намеренно? – markspace
(@markspace: не думайте так - посмотрите на все эти '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' /javadocs/api-release/org/apache/commons/collections4/collection/CompositeCollection.html), вы можете создать экземпляр для параметра '' toArray() '] (https://docs.oracle.com/javase/8/docs /api/java/util/Collection.html#toArray-T:A-) (за которым следует ['System.arraycopy()'] (https://docs.oracle.com/javase/8/docs/ api/java/lang/System.html # arraycopy-java.lang.Object-int-java.lang.Object-int-int-), если потребуется). – greybeard
Мой код работает для чисел до max_int положительных чисел. Я изначально не загружал все, чтобы не занять место, поэтому вот мой код в pastebin: [link] (http://pastebin.com/BzJ45241) –