Я не совсем понимаю сортировку radix, поэтому мне сложнее написать эту программу. Мне нужно отсортировать массив строк, который считывается из .txt-файла. Я смог прочитать файл и ввести строки в массив. Строка может содержать буквы или специальные символы. Мне нужна помощь в написании кода для сортировки массива. Мне кажется, что я близок к правильному коду, но я застрял и не знаю, что еще делать. Было бы очень полезно, если бы я мог получить помощь и указать мне в правильном направлении.Radix Сортировка массива строк с использованием очереди в Java
Каждая строка имеет одинаковое количество символов. Я также использую stackPackage, который содержит класс очереди. Мне нужно изменить код, который мой профессор дал мне, чтобы сортировать строки.
Вот код, который я начал с:
import queuepackage.*;
общественного класса Radix {
public static void main(String[] args) {
int[] array = {143,934,782,687,555,222,111,213,842,2000};
printArray(array);
radixSort(array, 1000);
printArray(array);
}
public static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + ", ");
}
System.out.println();
}
public static void radixSort(int[] array, int maxPowerOf10) {
Queue[] queueArray = new Queue[10];
for (int queueNum = 0; queueNum < 10; queueNum++) {
queueArray[queueNum] = new Queue();
}
for (int powerOf10 = 1; powerOf10 <= maxPowerOf10; powerOf10 = powerOf10 * 10) {
for (int item = 0; item < array.length; item++) {
int digit = getDigit(array[item], powerOf10);
queueArray[digit].enqueue(new Integer(array[item]));
}
int item = 0;
for (int queueNum = 0; queueNum < 10; queueNum++) {
while (!queueArray[queueNum].isEmpty()) {
array[item] = ((Integer) queueArray[queueNum].dequeue()).intValue();
item++;
}
}
}
}
public static int getDigit(int number, int powerOf10) {
return (number/powerOf10)%10;
}
}
Это то, что у меня есть.
длина = длина массива
wordLen = длина строки в массиве
Вот мой текущий код метода RadixSort:
public static void radixSort(String[] array, int length, int wordLen) {
Queue[] queueArray = new Queue[256];
for (int queueNum = 0; queueNum < 256; queueNum++) {
queueArray[queueNum] = new Queue();
}
for (int len = 0; len < wordLen; len++) {
for (int item = 0; item < length; item++) {
int letter = array[item].charAt(len);
queueArray[letter].enqueue(new String(array[item]));
}
int item = 0;
for (int queueNum = 0; queueNum < 256; queueNum++) {
while (!queueArray[queueNum].isEmpty()) {
array[item] = ((String) queueArray[queueNum].dequeue()).toString();
item++;
}
}
}
}
ДА это работало. Спасибо огромное! – Garret