Java 数组排序
我正在测试不同的排序方法(选择、气泡插入),同时尝试使用Comparator 到目前为止,我有两个班;Main和Selectionsort 我的主要观点如下: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æ
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:)