繁体   English   中英

使用数组排序

Sorting with Array

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在测试不同的排序方法(选择,气泡插入),我正在尝试同时使用Comparator。

到目前为止,我有两节课; 主要和选择。

我的主要看起来像这样:

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String[] anArray = {"Ludo", "matador", "ChessTitan", "Rottefælden"};

        for (int i=0; i<anArray.length-1; i++) {
            for (int j=i+1; j<anArray.length; j++) {
                if (anArray[j].compareTo(anArray[i]) < 1) {

                    String temp = anArray[i];
                    anArray[i] = anArray[j];
                    anArray[j] = temp;

                }
            }

        }

        for (String string : anArray) {
            System.out.println(string);
        }
    }
}

我的selectionSort看起来像这样:

public class SelectionSort implements Comparator<String> {

    @Override
    public int compare(String o1, String o2) {      
        return o1.compareTo(o2);
    }
}

我想要做的是在使用选择排序时使用我的比较器。

这怎么可能?

3 个回复

替换这一行:

if (anArray[j].compareTo(anArray[i]) < 1) {

有了这个:

if (comparator.compare(anArray[j],anArray[i]) < 1) {

其中comparator是您要使用的比较comparator的实例。


由于您的比较器没有状态,您可能希望将其分配给静态最终字段。

private static final Comparator<String> COMP = new SelectionSort();

所以现在上面的代码会读

if (COMP.compare(anArray[j],anArray[i]) < 1) {

这是您上一个问题的解决方案。 创建两个重载的静态方法,一个使用Comparator,一个不使用,然后还创建一个使用自然顺序的Comparator(令人惊讶的是,我在JDK中没有这样的东西可用)。 像这样的东西:

private static final Comparator<? extends Comparable> NATURAL_ORDER = new Comparator<Comparable>() {
    @Override
    public int compare(final Comparable o1, final Comparable o2) {
        return o1.compareTo(o2);
    }
};

private static <T> Comparator<T> naturalOrder() {
    return (Comparator<T>) NATURAL_ORDER;
}

public static <T> void sort(final T[] array) {
    if (!Comparable.class.isAssignableFrom(array.getClass().getComponentType())) {
        throw new IllegalArgumentException(
              "Array Component Type must implement Comparable");
    }

    sort(array, naturalOrder());
}

public static <T> void sort(final T[] array, final Comparator<? super T> comparator) {
    // implement sort here
}

您可以使用Arrays.sort

Arrays.sort(myArray, myComparator)

然后你可以传入你想要的任何比较器。

您可以创建SelectionSort实例以将其用于比较

SelectionSort selectionSort = new SelectionSort();
if (selectionSort.compare(anArray[i], anArray[j]) < 1) {
1 如何使用数组排序?

编写一个程序,使用数组根据价格对10个玉米饼的价格进行升序排序。 我正在尝试炸玉米饼。 用户必须输入10个炸玉米饼的名称和价格,然后按升序对它们进行排序。 到目前为止,我有: 我希望结果有点像墨西哥卷饼价格分拣机! 输入10个炸玉米饼的名称和价格,我将对其进行排序! ...

2 使用子数组排序

问题:嘿,我正在尝试创建一个网站,通过让用户提交他们自己的作品然后从最好到最差对其他五个提交进行排名来对某些提交进行排名。 我的尝试:我已经模拟了这一点,其中提交是来自 0 次提交的数字,然后我通过采用排序数组并以 75%、50%、25% 和 1、2、3 或 4 次交换来引入一些人为错误12% 的 ...

3 使用指针数组排序

因此,我将此结构称为具有成员字符串名称和int age的人。 基本上,我从文件中读取人员的姓名和年龄,然后将其放入People对象的数组中。 我有另一个指向该数组的数组。 我正在尝试按年龄(选择排序)和名称(冒泡排序)对人员进行排序,但似乎没有用。 文件看起来像这样: 按年龄排序后,没有任何 ...

4 使用合并排序的数组排序索引

我试图使用mergesort对数组的索引进行排序。 mergesort可以完美地工作,并且最终答案是完全正确的,但是我不确定为什么索引不能在正确的位置工作。 我不想对数组进行排序,我要做的就是对索引列表perm []数组进行排序。 为避免混淆,这里举一个例子:perm数组保存原始数组n ...

5 使用其他数组排序数组

我试图实现一种算法,该算法使用长度为n的数组对长度为DIM*n的数组r进行排序。 我没看到我的代码错在哪里。 我没有得到预期的结果。 结果应该看起来像填充莫顿曲线的空间。 但正如您所看到的,结果包含许多零。 我不知道他们来自哪里? 你能帮我找一下这个错误吗? 这是我的可执行代码: ...

2016-11-26 00:26:48 1 61   c/ sorting
6 使用数组进行数组排序

现在,我们必须根据$sortPattern对$toSort数组进行排序。 我们应该有结果 有谁知道执行此操作的功能,还是我们必须编写自己的功能来执行此操作? ...

7 在IOS上无法使用数组排序日期

因此,我从自己的服务器获取数据,并将数据设置为一个名为:items的变量。 所以每当我这样做: 在Windows和android上,它确实对我的数组进行排序,但是每当我在类似iphone的苹果产品上尝试此操作时,它就不会按日期排序,因此我严重不知道如何进行操作? ...

8 使用主键对2D数组排序

我正在尝试拆分文本文件的每一行并插入到数组列表中。 1,如何将数字存储为整数,其余的是数组列表中的字符串。 (使用当前代码引发数字格式错误)。 2,当我使用Java集合插入数组时,是否可以基于整数排序? 到目前为止,我已经 让我再次表述我的问题:如何将记录[1]设置 ...

9 使用PHP进行数组排序

有没有一种方法可以在PHP中使用描述符进行以下排序: 阵列1: $ array1 = [“ blah”,“ quack”,“ yot”]; 阵列2 $array2 = [1,9,6]; 本质上,我试图用1来表示blah,用9来表示quak,用6来描述yot。基本上, ...

10 如何使用IOS按内部数组排序

我有一个NSArray,在数组中每个项目都有一个名为“venue”的内部数组,然后在另一个名为“location”的数组中。 我想按每个“位置”数组中的“距离”值对数组进行排序。 有人能指出我正确的方向,这就是数组。 在我使用以下但是它似乎没有任何效果的那一刻。 谢谢 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM