如何使用插入排序按字母顺序排序?

时间:2020-07-05 21:45:02

标签: java sorting arraylist insertion-sort

您好,我正在研究按字母顺序对arraylist进行排序的代码,但是我编写的代码却以相反的字母顺序返回。有人知道为什么吗?我似乎无法弄清楚,对于初学者程序员的帮助将不胜感激!

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;
    }
}

2 个答案:

答案 0 :(得分:0)

工作正常。它只是按相反的顺序排序。换句话说,可以更改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--;
}

答案 1 :(得分:0)

您可以将 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);

}