对ArrayList执行选择排序

问题描述 投票:0回答:2

我需要根据“值”从最高到最低排序数组列表,我真的卡住了:(基本上在这个项目中,他们将运行一个项目列表,这个方法应该把一个具有最高价值的一个所以堡垒和我试图使用选择排序。谢谢你提前帮助:)这是我现在所拥有的

public void pickMostExpensiveFirst(ArrayList<Item> totalListOfItems)
{
    int max, i ,j;
    Item temp;

    for (i = 0; i < totalListOfItems.size() - 1; i++)
    {
        max = i;

        for (j = i + 1; j < totalListOfItems.size(); j++)
        {
            if (totalListOfItems.get(max).getValue()
                    .compareTo(totalListOfItems.get(j).getValue()) > 0)
                max = j;
        }

        temp = totalListOfItems.get(i);
        totalListOfItems.set(i, totalListOfItems.get(max));
        totalListOfItems.set(max, temp);
    }
}
java sorting arraylist selection-sort
2个回答
1
投票

你的问题在于:

if (totalListOfItems.get(max).getValue().compareTo(totalListOfItems.get(j).getValue()) > 0)
  max = j;

在这里你比较位置max和j的项目,如果item(max)> item(j),你用max替换max。这基本上是搜索LOWEST值,而不是HIGHEST。切换它,你的问题就解决了。


0
投票

Java帮助面向对象编程,为什么在Java集合框架(以及支持类)提供现成的经过验证的解决方案时从头开始实现。

如果方法的目标只是识别最大/最小或排序列表,那么java.util.Collections类提供了util方法。唯一的要求是你的Item类应该是(IsA关系)Comparable,这意味着Item应该实现Comparable接口。如果您无法控制Item类代码,那么我们可以使用Interface Comparator来提供比较规则。示例代码如下所示。

public static void pickMostExpensiveFirst(ArrayList<Item> totalListOfItems) {
    System.out.println(Collections.max(totalListOfItems));
    // Collections.sort(totalListOfItems); // to sort with Comparable
    // Collections.sort(totalListOfItems, ValueComparator); // to sort with
    //                                                         Comparator
}

class Item implements Comparable<Item> {
    String name;
    int value;

    public Item(String name, int value) {
        this.name = name;
        this.value = value;
    }

    @Override
    public int compareTo(Item other) {
        return Integer.compare(this.value, other.value);
        // return -1 * Integer.compare(this.value, other.value); in case you 
                                                     //need descending order

    }

    @Override
    public String toString() {
        return name + " " + value;
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.