首页 文章

使用冒泡排序对ArrayList <BigDecimal>进行排序

提问于
浏览
1

我正在尝试订购一个Arraylist,它包含从最大到最小的BigDecimal值 . 那是我的代码:

public void bubble_sort(ArrayList<String> nameArray, ArrayList<BigDecimal> priceArray){
    for (int i = 0; i < priceArray.size(); i++){
        for (int j = 0; j < priceArray.size() - 1; j++){
            if (priceArray.indexOf(j) > priceArray.indexOf(j+1)){
                int temp = priceArray.indexOf(j);
                priceArray.set(j, priceArray.get(j+1));
                priceArray.set(j+1, BigDecimal.valueOf(temp));
            }
        }
    }
    Log.v("Ordering array", priceArray.toString());

}

但顺序仍与原始数组相同 . 我该怎么办?

2 回答

  • 1

    首先,你使用String Array nameArray是什么?在你的代码中没有注意到它 . 如果我理解得很好,我想你想要这样的东西:

    public void bubble_sort(ArrayList<String> nameArray, ArrayList<BigDecimal> priceArray){
    
            boolean swap=true;
            double temp=0;
            while (swap){
            swap=false;
            for (int i = 0; i < priceArray.size()-1; i++){
           if (priceArray.indexOf(j) > priceArray.indexOf(j+1)){
                temp = priceArray.indexOf(j);
                priceArray.set(j, priceArray.get(j+1));
                priceArray.set(j+1, BigDecimal.valueOf(temp));
            }
            swap=true
            }
            }
    }
                    Log.v("Ordering array", priceArray.toString());
                }
    }
    
  • 2

    您正在比较索引而不是值 .

    改变这个

    if (priceArray.indexOf(j) > priceArray.indexOf(j+1)){
        int temp = priceArray.indexOf(j);
        priceArray.set(j, priceArray.get(j+1));
        priceArray.set(j+1, BigDecimal.valueOf(temp));
    }
    

    if (priceArray.get(j).compareTo(priceArray.get(j+1) > 0){
        BigDecimal temp = priceArray.get(j);
        priceArray.set(j, priceArray.get(j+1));
        priceArray.set(j+1, temp);
    }
    

相关问题