【问题标题】:ArrayList Bubblesort with stringsArrayList 带字符串的冒泡排序
【发布时间】:2021-01-13 09:41:35
【问题描述】:

排序不起作用,它没有按字母对名称进行排序,我用 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;
    }

【问题讨论】:

  • 看起来您正在将 pList.get(i) 与 pList.get(j+1) 进行比较,但随后您将 pList.get(j) 与 pList.get(j+1) 交换.我相信您应该将第 j 个元素与第 j+1 个元素进行比较。
  • 谢谢,我深陷其中,以至于忽略了它

标签: java string bubble-sort


【解决方案1】:

您的实现不是 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, 1, 2, 3, 4, 5, 6, 7, 8, 9]

【讨论】:

  • 好的。就这样吧:-)
猜你喜欢
  • 2020-04-21
  • 2014-06-25
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
  • 2021-12-13
  • 2018-02-25
相关资源
最近更新 更多