使用compareTo以升序对一个数组排序

时间:2018-11-07 15:50:36

标签: java

需要帮助而无需排序功能的排序

2 个答案:

答案 0 :(得分:1)

不能仅通过一个循环对数组进行排序。如果您不允许使用sort方法,可以使用经典的冒泡排序:

for (int i = 0; i < ch.length; i++) {
     for (int j = 0; j < ch.length - 1; j++) {
         if (ch[j].compareTo(ch[j + 1]) < 0) {
             Chocolate temp = ch[j];
             ch[j] = ch[j + 1];
             ch[j + 1] = temp;
         }
     }
}

但是您需要in来实现它。

答案 1 :(得分:0)

只要有以下限制,就可以不使用任何类型的常用排序技术就可以进行排序:

  1. 用于排序的字段是整数,或者可以转换为整数。
  2. 该字段的整数值范围在较小的预定义范围内。

在您的情况下,您的示例满足两个约束。

  1. 您正在按cQuantity字段排序,该字段是整数。
  2. cQuantity字段在0到19之间。

您可以做的是:

  1. 创建一个Chocolate[20][20]数组。让我们称之为sorted
  2. ch进行迭代,并使用它们的Chocolate字段作为索引将每个sorted放入上面的getQuantity数组中。如果我们有多个Chocolate和相同的getQuantity,请将它们添加到同一索引下。
  3. 遍历sorted,如果不是null,则打印其值。

代码如下:

Chocolate[][] sorted = new Chocolate[20][20];        

    for (Chocolate c : ch) {
        Chocolate[] bucket = sorted[ c.getQuantity() ];
        if (bucket == null) {
            bucket = new Chocolate[20];
            bucket[0] = c;
            sorted[ c.getQuantity() ] = bucket;
        }else {
            //if we already have entry under this index, find next index that is not occupaed and add this one
            for (int i = 0; i < bucket.length; i++) {
                if (bucket[i] == null) {
                    bucket[i] = c;
                    break;
                }
            }
        }
    }

    for (Chocolate[] bucket : sorted) {
        if ( bucket != null) {
            //System.out.println("b");
            for (Chocolate c : bucket) {
                if (c != null) System.out.println( c.getName() + " " + c.getQuantity() );                    
            }   
        }      
    }