arraylist 字符串中的插入排序 Java 算法
Insertion sort Java algorithm in an arraylist String
所以我有一个我想要的数组列表,我需要使用插入排序算法对编程进行排序 class。我有这个和包含这些字符串的 ArrayList = (Andrew, Felip, Juan, Camil, Jhon, William) 我有这个 Java 代码:
public void insertionSort( )
{
ArrayList<Reserve> array = giveReserves();
for(int i = 1 ; i < array.size()-1; i++)
{
Reserve element = array.get(i);
String nomI = element.giveNameClient();
int j = i;
String nomJM = array.get(j-1).giveNameClient();
String nomJ = array.get(j).giveNameClient();
while(j > 0 && (nomJM.compareTo(nomJ) > 0))
{
Reserve temp = array.get(j);
array.set(j, array.get(j-1));
array.set(j-1, temp);
j = j-1;
}
}
}
所以我有一家酒店,它有一个预订的 ArrayList,每个预订都有做这件事的客户的名字。我想做的是按客户名称对 Reserve ArrayList 进行排序。
所以我有一个打印每个名称客户端的方法,如下所示:
public void showNames()
{
for(Reserve x: reserves)
{
System.out.print(x.giveNameClient() +" ");
}
}
在 main() 方法中,我在排序之前打印了客户的名称,然后进行了排序。顺便说一句,储备数组列表在一个名为 Test.class 的 class 中。
public static void main(String args[])
{
Test object = new Test();
System.out.println("Names: ");
object.showNames();
object.insertionSort();
System.out.println();
System.out.println("after sorting: ");
object.showNames();
}
现在,当我编译它时,我得到以下信息:
Names:
Juan Jhon Camil William Andrew Felip
after sorting:
Andrew Camil Jhon Juan William Felip
问题是输出应该是 Andrew Camil Felip Jhon Juan William
谢谢。
尝试将循环的条件更改为:i < array.size()
而不是 i < array.size()-1
。
当您访问 i
和 i+1
处的元素时,使用 i < array.size()-1
很有意义,但您似乎访问了 i
和 i - 1
处的元素.
这应该会为您提供所需的输出。您的代码中存在许多问题。您正在使用 i < array.size() - 1
循环定义跳过数组中的元素。
String[] inputArray = {"Juan", "Jhon", "Camil", "William", "Andrew", "Felip"};
for(int i = 1; i < inputArray.length; i++) {
String key = inputArray[i];
int j = i - 1;
while (j >= 0 && key.compareTo(inputArray[j]) < 0) {
inputArray[j + 1] = inputArray[j];
j--;
}
inputArray[j + 1] = key;
}
System.out.println(Arrays.toString(inputArray));
所以我有一个我想要的数组列表,我需要使用插入排序算法对编程进行排序 class。我有这个和包含这些字符串的 ArrayList = (Andrew, Felip, Juan, Camil, Jhon, William) 我有这个 Java 代码:
public void insertionSort( )
{
ArrayList<Reserve> array = giveReserves();
for(int i = 1 ; i < array.size()-1; i++)
{
Reserve element = array.get(i);
String nomI = element.giveNameClient();
int j = i;
String nomJM = array.get(j-1).giveNameClient();
String nomJ = array.get(j).giveNameClient();
while(j > 0 && (nomJM.compareTo(nomJ) > 0))
{
Reserve temp = array.get(j);
array.set(j, array.get(j-1));
array.set(j-1, temp);
j = j-1;
}
}
}
所以我有一家酒店,它有一个预订的 ArrayList,每个预订都有做这件事的客户的名字。我想做的是按客户名称对 Reserve ArrayList 进行排序。
所以我有一个打印每个名称客户端的方法,如下所示:
public void showNames()
{
for(Reserve x: reserves)
{
System.out.print(x.giveNameClient() +" ");
}
}
在 main() 方法中,我在排序之前打印了客户的名称,然后进行了排序。顺便说一句,储备数组列表在一个名为 Test.class 的 class 中。
public static void main(String args[])
{
Test object = new Test();
System.out.println("Names: ");
object.showNames();
object.insertionSort();
System.out.println();
System.out.println("after sorting: ");
object.showNames();
}
现在,当我编译它时,我得到以下信息:
Names:
Juan Jhon Camil William Andrew Felip
after sorting:
Andrew Camil Jhon Juan William Felip
问题是输出应该是 Andrew Camil Felip Jhon Juan William
谢谢。
尝试将循环的条件更改为:i < array.size()
而不是 i < array.size()-1
。
当您访问 i
和 i+1
处的元素时,使用 i < array.size()-1
很有意义,但您似乎访问了 i
和 i - 1
处的元素.
这应该会为您提供所需的输出。您的代码中存在许多问题。您正在使用 i < array.size() - 1
循环定义跳过数组中的元素。
String[] inputArray = {"Juan", "Jhon", "Camil", "William", "Andrew", "Felip"};
for(int i = 1; i < inputArray.length; i++) {
String key = inputArray[i];
int j = i - 1;
while (j >= 0 && key.compareTo(inputArray[j]) < 0) {
inputArray[j + 1] = inputArray[j];
j--;
}
inputArray[j + 1] = key;
}
System.out.println(Arrays.toString(inputArray));