带有字符串的ArrayList Bubblesort

问题描述

排序不起作用,它不按字母对名称进行排序,我用int编写了一个冒泡排序算法,它运行良好。你能帮助我吗? compareto()方法有问题吗?

public ArrayList<FootballPlayer> sortByNames(ArrayList<FootballPlayer> pList)
    {
        FootballPlayer z;
        for(int i=0; i<pList.size(); i++)
        {
            for(int j=0; j<pList.size()-i-1;j++)
            {
                if((pList.get(i).getName()).compareto(pList.get(j+1).getName())>0)
                {
                    z = pList.get(j);
                    pList.set(j,pList.get(j+1));
                    pList.set(j+1,z);
                }
            }
        }
        for(int i=0; i<pList.size(); i++)
        {
            System.out.print(pList.get(i).getName()+";");
            System.out.println("");
        }
         return pList;
    }

解决方法

您的实现不是 BubbleSort !检查Bubble sort或事件Cocktail shaker sort更高级。

public static void bubbleSort(List<String> pList) {
    boolean done = false;

    for (int i = pList.size(); !done; i--) {
        done = true;

        for (int j = 0; j + 1 < i; j++) {
            if (pList.get(j).compareTo(pList.get(j + 1)) <= 0)
                continue;

            done = false;
            String tmp = pList.get(j);
            pList.set(j,pList.get(j + 1));
            pList.set(j + 1,tmp);
        }
    }
}

输出:

List<String> pList = new ArrayList<>();

for (int i = 0; i < 10; i++)
    pList.add(String.valueOf(i));

Collections.shuffle(pList);

System.out.println(pList);  // [0,6,7,9,5,8,4,1,3,2]
bubbleSort(pList);
System.out.println(pList);  // [0,2,9]