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);
}
我想我可能在某个地方犯了一个错误,但我不知道在哪里......
答案 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.
}
}