gpt4 book ai didi

java - Radix 在 Java 中使用队列对字符串数组进行排序

转载 作者:行者123 更新时间:2023-11-30 07:24:50 25 4
gpt4 key购买 nike

我不完全理解基数排序,这使得我编写这个程序变得更加困难。我需要对从 .txt 文件读取的字符串数组进行排序。我能够读取该文件并将字符串输入到数组中。字符串可以包含字母或特殊字符。我需要帮助编写用于对数组进行排序的代码。感觉我已经接近拥有正确的代码了,但我被困住了,不知道还能做什么。如果我能获得帮助并为我指明正确的方向,我将不胜感激。

每个字符串具有相同数量的字符。我还使用包含队列类的 stackPackage。我需要修改教授给我的代码来对字符串进行排序。

这是我开始的代码:

import queuepackage.*;

公共(public)类基数{

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++;
}
}
}
}

最佳答案

它几乎可以工作了,你只需要向后迭代单词,看看第二个 for 循环

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 = wordLen-1; len >= 0; 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(); // Here you need to swap the
item++;
}
}
}
}

如果您以常规方式迭代它,您将丢失以前的信息,因此最后一个字符是最重要的

祝你好运!

关于java - Radix 在 Java 中使用队列对字符串数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36962105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com