【问题标题】:How to use insertion sort to sort alphabetically?如何使用插入排序按字母顺序排序?
【发布时间】:2020-10-26 00:33:19
【问题描述】:

您好,我正在编写按字母顺序对数组列表进行排序的代码,但是我编写的代码以相反的字母顺序返回。有谁明白为什么??我似乎无法弄清楚,我是初学者程序员,将不胜感激!

public class InsertionSorting {
    
    public static void main(String[] args) {
        ArrayList<String> color = new ArrayList<String>(5);
        color.add("White");
        color.add("Black");
        color.add("Red");
        color.add("White");
        color.add("Yellow");
        
        for (int i = 0; i < 5; i++) {
            System.out.println(color.get(i).toString());
        }
        System.out.println();
        insertionSort(color);
        for (int i = 0; i < 5; i++) {
            System.out.println(color.get(i).toString());
        }
    }
    
    public static ArrayList<String>
            insertionSort(ArrayList<String> a) {
        for (int i = 1; i < a.size(); i++) {
            String s = a.get(i);
            int j = i - 1;
            while (j >= 0 && s.compareTo(a.get(j)) > 0) {
                String y = a.get(j + 1);
                a.set(j + 1, a.get(j));
                a.set(j, y);
                j--;
            }
            String y = a.get(j + 1);
            y = s;
        }
        return a;
    }
}

【问题讨论】:

    标签: java sorting arraylist insertion-sort


    【解决方案1】:

    它工作正常。它只是以相反的顺序排序。要以其他方式排序,请更改您的 compare 相等性。

    while (j >= 0 && s.compareTo(a.get(j)) < 0) {
        String y = a.get(j + 1);
        a.set(j + 1, a.get(j));
        a.set(j, y);
        j--;
    }
    

    【讨论】:

      【解决方案2】:

      你可以将main中的第二个for改成

      for (int i = 4; i >= 0; i--){
      
          System.out.println(color.get(i).toString());
      
      }
      
      

      或者更容易你可以在你的 main

      中使用它
      ArrayList<String> colors = new ArrayList<String>(5);
      colors.add("White");
      colors.add("Black");
      colors.add("Red");
      colors.add("Brown");
      colors.add("Yellow");
      
      Collections.sort(colors);
      
      for(String color : colors){
      
          System.out.println(color);
      
      }
      

      【讨论】:

      • 但这无助于解释为什么问题中的代码以相反的字母顺序返回。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 2019-04-05
      相关资源
      最近更新 更多