我是 Java 新手,正在寻求一些建议,我正在学习队列数据结构并尝试创建一种算法,将字符串列表按升序排序。当按升序对数组进行排序时,您将创建一个键来保存 for 循环中索引的元素。
这是我用 C++ 编写的函数代码,它将整数数组按升序排序。
int array[] = {38, 27, 43, 3, 9, 82,10};
int length_of_array = sizeof(Test1) / sizeof(Test1[1]);
for(int i = 1; i < length_of_array; i++){
int key = array[i];
int j = i - 1;
while(j >= 0 && array[j] > key){
array[j + 1] = array[j];
j--;
}
array[j + 1] = key;
}
我正在尝试在 Java 中做类似的事情,但使用不同的数据结构(队列)和不同的数据集(字符串)。我尝试遵循 C++ 代码中的类似原则,创建一个 for 循环并检查队列中的每个元素并按字母顺序对它们进行排序。
我假设您需要在 for 循环中使用当前位置的元素的键。但是,我似乎无法从循环的索引点为变量“key”分配一个元素。
Queue<String> queue = new LinkedList<String>();
queue.add("Sam");
queue.add("Mary");
queue.add("James");
queue.add("Sarah");
queue.add("Arnold");
for(int i = 1; i < queue.size();i++) {
String key = queue.get(i);
}
这是我到目前为止用 Java 编写的内容,我尝试使用queue.element(),但意识到它只会从队列中获取最后一个元素。尝试使用 .index() 和 .get() 但不断收到错误,所以我不确定如何从循环中获取元素。
我知道在创建队列对象而不是使用 LinkedList 时,您可以使用 PriorityQueue 它将自动按升序排列列表,但我正在尝试在使用 LinkedList 时创建自己的算法,是否可能,如果可以的话我想要一些建议吗?或者使用Queue时是否有其他更好的算法可以写。
我这样做的原因是因为我目前是一名大学生,我们的一个模块与算法有关。因此,我试图找出一种算法,以升序和降序对不同的数据类型进行排序,而不使用内置的方法,例如 sort()。
为正确的工作使用正确的数据结构!!!您似乎对队列有误解。基于
Queue
的基本链表根据 插入 顺序存储和检索项目;同时,您要做的就是根据每个项目的值按“排序”顺序存储/检索项目。这是一个明显的反模式;基本的 Queue
不是为此而设计的。就像你说的,PriorityQueue
显然是最合适的。但如果你真的想设计自己的算法,请查看如何在 Java 中实现堆(
GeeksForGeeks这里有一个很好的实现)。我知道这只是练习,但在现实世界中,只需使用
PriorityQueue
并继续,没有必要重新发明轮子。