Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组排序_Java_Arrays_Sorting - Fatal编程技术网

Java 数组排序

Java 数组排序,java,arrays,sorting,Java,Arrays,Sorting,我正在测试不同的排序方法(选择、气泡插入),同时尝试使用Comparator 到目前为止,我有两个班;Main和Selectionsort 我的主要观点如下: public class Main { /** * @param args */ public static void main(String[] args) { String[] anArray = {"Ludo", "matador", "ChessTitan", "Rottefæ

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

到目前为止,我有两个班;Main和Selectionsort

我的主要观点如下:

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);
        }
    }
}
public class SelectionSort implements Comparator<String> {

    @Override
    public int compare(String o1, String o2) {      
        return o1.compareTo(o2);
    }
}
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
}
公共类主{
/**
*@param args
*/
公共静态void main(字符串[]args){
String[]anArray={“Ludo”、“matador”、“ChessTitan”、“rotfælden”};
对于(int i=0;i您可以使用

然后,您可以传入任何所需的比较器。

替换此行:

if (anArray[j].compareTo(anArray[i]) < 1) {
现在上面的代码应该是

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

这是最后一个问题的解决方案。创建两个重载静态方法,一个带比较器,一个不带,然后还创建一个使用自然顺序的比较器(令人惊讶的是,据我所知,JDK中没有这样的方法)。类似这样:

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);
        }
    }
}
public class SelectionSort implements Comparator<String> {

    @Override
    public int compare(String o1, String o2) {      
        return o1.compareTo(o2);
    }
}
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
}

private static final Comparator您可以创建
SelectionSort
的实例来使用它进行比较

SelectionSort selectionSort = new SelectionSort();
if (selectionSort.compare(anArray[i], anArray[j]) < 1) {
SelectionSort SelectionSort=new SelectionSort();
if(选择排序比较(anArray[i],anArray[j])<1){

Array.sort
merge sort
而不是
selection sort
好的一点,Amit,我的错误。引用文档“排序算法是一种改进的mergesort(在这种算法中,如果低位子列表中的最高元素小于高位子列表中的最低元素,则忽略合并)。该算法提供了保证的n*log(n) 性能。“所以我无法使用Arrays.sort和selection sort?正确。这是我的错误。到目前为止,我创建了一个comparator类的实例,并在我的if语句中使用了它。)它工作正常,我非常高兴现在我需要转到bubblesort:)