0
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

4 回答 4

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());
            }
        }

    }
于 2013-11-02T13:14:23.120 回答
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. 
    }

}
于 2013-11-02T14:15:00.007 回答
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() 。

于 2013-11-02T13:41:50.170 回答
0

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

于 2013-11-02T12:47:24.630 回答