【问题标题】:Insertion sort Java algorithm in an arraylist String数组列表字符串中的插入排序Java算法
【发布时间】:2016-05-07 22:31:06
【问题描述】:

所以我有一个我想要的数组列表,我需要使用编程类的插入排序算法对其进行排序。我有这个和 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() 方法中,我在排序之前打印客户端的名称,然后再进行排序。顺便说一句,reserve 的arraylist 在一个名为 Test 的类中。

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

谢谢。

【问题讨论】:

  • 检查您的循环条件。您忽略了列表中的最后一个元素
  • 是的,我知道我忽略了最后一个元素,但我不明白为什么
  • 泛型插入排序请参考this

标签: java algorithm sorting arraylist insertion


【解决方案1】:

尝试将循环的条件更改为:i &lt; array.size() 而不是 i &lt; array.size()-1

当您访问ii+1 的元素时使用i &lt; array.size()-1 是有意义的,但您似乎访问的是ii - 1 的元素。

【讨论】:

  • 我只将 size()-1 更改为 size(),我得到的输出是 Felip Andrew Camil Jhon Juan William。所以Felip还是不合适,我不知道为什么。
【解决方案2】:

这应该会为您提供所需的输出。您的代码中有很多问题。您正在使用 i &lt; 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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2012-05-16
    相关资源
    最近更新 更多