【问题标题】:Java - Sorting ArrayList - Bubble SortJava - 排序 ArrayList - 冒泡排序
【发布时间】:2014-06-25 07:50:57
【问题描述】:

我必须对包含客户购买频率的数组列表进行排序。所以我可以按升序或降序显示输出。但是,我不太确定我错过了什么,但它根本没有对元素进行排序。非常感谢任何 cmets 或反馈!

这是我目前所拥有的:

for(int i=0; i<customers.size(); i++)
{
        for(int k= i+1; k <customers.size(); k++)
        {
                if((customers.get(k)).compareTo(customers.get(i)) < 0)
                {
                        Customer temp = customers.get(i);
                        customers.set(i, customers.get(k));
                        customers.set(k,temp);

                }
        }

        System.out.println(customers.get(i));   
}

【问题讨论】:

  • 我相信关键是if((customers.get(k)).compareToIgnoreCase(customers.get(i)) &lt; 0)。我建议您调试一下,看看它是否按预期工作。
  • 您的代码甚至无效,正在编译 Java 代码。为什么不使用 Collections.sort() 而不是重新发明轮子?
  • 另外,int = k+1int k = i+1 对吗?
  • int = k+1 - 什么?这不可能是您的真实代码。向我们展示,如果不是您的真实代码,那么至少是您实际测试过的代码。
  • 我需要为这个程序使用冒泡排序算法。

标签: java sorting arraylist bubble-sort


【解决方案1】:

保持K = i,为你的内循环试试这个:

for(int k= i; k <customers.size() - i -1; k++)
{

这应该可以。

【讨论】:

  • 如果k==i,则无需将kth 对象与ith 对象进行比较。
【解决方案2】:

如果要打印排序列表System.out.println(customers.get(i)); 必须在排序循环之外。在该循环之后添加另一个循环以打印结果

【讨论】:

    【解决方案3】:

    你犯了一些错误,

    // I tested with List<String>, String temp.
    public static void sort(List<Customer> customers) {
      for (int i = 0; i < customers.size() - 1; i++) {
        for (int k = i + 1; k < customers.size(); k++) {
          // Compare left to right, not right to left.
          if (customers.get(i).compareToIgnoreCase(customers.get(k)) > 0) {
            Customer temp = customers.get(i);
            customers.set(i, customers.get(k));
            customers.set(k, temp);
          }
        }
      }
    }
    

    当我测试时

    public static void main(String[] args) {
      String[] names = { "Bob", "bob", "Alice", "Bob",
          "Carol" };
      List<String> al = new ArrayList<String>(
          Arrays.asList(names));
      sort(al);
      for (String str : al) {
        System.out.println(str);
      }
    }
    

    我明白了

    Alice
    bob
    Bob
    Bob
    Carol
    

    【讨论】:

      【解决方案4】:

      试试这个

      int n = yourArray.size();
          for (int i = 0; i < n - 1; i++)
              for (int j = 0; j < n - i - 1; j++)
                  if (yourArray.get(j) < yourArray.get(j + 1)) {
                      int temp = yourArray.get(j);
                      yourArray.set(j, yourArray.get(j + 1));
                      yourArray.set(j + 1, temp);`
                  }
      

      【讨论】:

        猜你喜欢
        • 2014-08-09
        • 1970-01-01
        • 2020-04-21
        • 2017-06-17
        • 2018-08-19
        • 2019-05-10
        • 2021-12-13
        • 2019-06-14
        • 2013-09-04
        相关资源
        最近更新 更多