【问题标题】:How do I reverse sort an arraylist in java? (ONLY using selection sort)如何在java中对arraylist进行反向排序? (仅使用选择排序)
【发布时间】:2013-11-02 22:15:00
【问题描述】:
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);
    }

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

【问题讨论】:

  • 使用Collections.sort(list, Comparator)
  • 抱歉,您能告诉我一种使用选择排序进行反向排序的方法吗...
  • 请分享 ArrayList 的定义。
  • 不太清楚你的意思..
  • 你的代码是正确的(它是倒序选择排序)

标签: java sorting arraylist selection reverse


【解决方案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());
            }
        }

    }

【讨论】:

  • tbh 我还没有学过收藏品..但是谢谢你的回答。对不起
  • @user2947725:你还没学过收藏?如果 ArrayList 不是一个集合,你认为它是什么?是什么阻碍了你自学?如果你只使用你在学校学到的东西,你不会走得很远。文档的存在是有充分理由的。
  • 是的,我知道,我不是很聪明.. :(,抱歉浪费你的时间
【解决方案2】:

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

【讨论】:

  • 如果你已经有一个比较器但想要一个以相反顺序排序的比较器,那么使用Collections.sort(list, Collections.reverseOrder(comparator))
【解决方案3】:

对 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()。

【讨论】:

    【解决方案4】:

    试试这个:未测试

     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-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多