如何反转对java中的arraylist进行排序? (仅使用选择排序)

时间:2013-11-02 12:44:42

标签: java sorting arraylist selection reverse

for (int i = 0; i <array.size(); i++){
        int min = i;
        for (int j = i + 1; j < array.size(); j++){
            if (array.get(j).getnumber() > array.get(min).getnumber()){
                min = j;
            }
        }

        object tmp = array.get(i);
        array.set(i, array.get(min));
        array.set(min,tmp);
    }

我想我可能在某个地方犯了一个错误,但我不知道在哪里......

4 个答案:

答案 0 :(得分:1)

你不应该像这样实现排序,JAVA为我们提供了Comparable Interface来做到这一点更有效

public class Item implements Comparable<Item>{

private int number;

public Item(int number) {
    this.number = number;
}

public int getNumber() {
    return number;
}


public void setNumber(int number) {
    this.number = number;
}


public int compareTo(Item o) {
    //sort increasing
    //return  this.getNumber() - o.getNumber();

    //sort decreasing
    return o.getNumber() - this.number;
    }
}

主类:

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

    public class Main {

        public static void main(String[] args) {

            List<Item> list = Arrays.asList(new Item(3), new Item(6), new Item(-4));

            Collections.sort(list);

            for (Item item : list) {
                System.out.println(item.getNumber());
            }
        }

    }

答案 1 :(得分:0)

到目前为止,对列表c进行反向排序的最简单方法是Collections.sort(c, c.reverseOrder())。但是,List的元素需要实现Comparable接口。或者,您可以使用单独的比较器替换c.reverseOrder(),而不是实现Comparable

答案 2 :(得分:0)

排序ArrayLists的一种简单方法(和推荐方法)是使用类似的接口或Comparator对象。一旦你完成了很多次,这些很容易掌握,但是当你刚开始时有点混乱。下面是Comparator对象的一个​​示例(未经测试,但我认为它应该可行 - 假设数组中的对象属于“MyCustomObject”类型):

ArrayList<Integer> myArrayList = new ArrayList<MyCustomObject>();
myArrayList.add(new MyCustomObject(2));
myarrayList.add(new MyCustomObject(8));
myArrayList.add(new MyCustomObject(3));

// Here is the actual sorting:
Collections.sort(myArrayList, new Comparator<MyCustomObject>(){
    public int compare(MyCustomObject o1, MyCustomObject o2){
    if (o1.getNumber() > o2.getNumber()) return 1;
        if (o1.getNumber() < o2.getNumber()) return -1;
        return 0;
    }
}

如果要更改排序条件,只需更改其中的compare()实现 - 例如反转if语句或在对象中的其他字段上排序。如果你只是倒转,你应该使用此线程中其他人提到的reverseOrder()。

答案 3 :(得分:0)

试试这个:未经测试

 int currentMax;
 int currentMaxIndex;

 for (int i = 0; i <array.size(); i++){

    currentMax = array.get(i).getNumber();
    currentMaxIndex = i;

    for (int j = i + 1; j < array.size(); j++){
        if (array.get(j).getnumber() < array.get(i).getnumber()){
            currentMax = array.get(j).getNumber();
            currentMaxIndex = j;
        }
    }

    // swap only if neccessary
    if (currentMax > array.get(i).getNumber()) {
        object tmp = array.get(i);
        array.set(i, array.get(currentMaxIndex));
        array.set(currentMaxIndex,tmp);
        // not sure how your object work, so not sure how this swap is working
        // so i just left it. 
    }

}