【问题标题】:Insertion Sort with Objects, Strings and Arraylists对象、字符串和数组列表的插入排序
【发布时间】:2014-10-06 21:32:55
【问题描述】:

我的插入排序代码有问题。

公共静态 ArrayList InsertionSort (ArrayList playerNames){

    System.out.println("roster will now be sorted");

    for (int i = 1; i < playersNames.size();i++){

        int j = i - 1;
         Baller tempx = playersNames.get(i);
         Baller tempy = playersNames.get(j);
         while (j >= 0 &&  tempx.getName().compareToIgnoreCase(tempy.getName())< 0){
            playersNames.set(i, tempy);
            playersNames.set(j+1, tempx);
            j--;

         }


        System.out.println(playersNames);
    }

    return playersNames;
}

输出没有正确输出。

【问题讨论】:

    标签: java sorting arraylist insertion-sort


    【解决方案1】:

    我认为您需要对代码进行一些小的更改,以解决您遇到的问题。

    我们来看这部分代码:

         int j = i - 1;
         Baller tempx = playersNames.get(i);
         Baller tempy = playersNames.get(j);
         while (j >= 0 &&  tempx.getName().compareToIgnoreCase(tempy.getName())< 0){
            playersNames.set(i, tempy);
            playersNames.set(j+1, tempx);
            j--;
    
         }
    

    这里的想法是反复交换当前元素与前一个元素,直到它最终出现在正确的位置。这是正确的想法,但有一个小错误:在进行交换之后,tempy 仍然引用位于位置playersNames.get(i - 1) 的元素,因此循环的下一次迭代将比较错误的两个元素。此外,您总是在位置 i(当前元素开始的位置)执行交换,但您应该在位置 j+1(当前元素所在的位置)进行交换。

    要改变这一点,您有几个选择。我认为最干净的选择是消除tempxtempy 变量,以确保您不会意外犯此错误,而只是通过索引访问内容。例如:

         int j = i - 1;
         while (j >= 0 &&
                playersNames.get(j).getName().compareToIgnoreCase(playersNames.get(j+1).getName().getName()) < 0){
            Baller temp = playersNames.get(j);
            playersNames.set(j, playersNames.get(j+1));
            playersNames.set(j+1, temp);
            j--;
         }
    

    【讨论】:

      猜你喜欢
      • 2013-12-31
      • 2020-11-12
      • 2016-05-07
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 2011-04-24
      相关资源
      最近更新 更多