1

我试图更改以下代码中的排序方法以对任何类型的对象进行排序,而不仅仅是字符串,但有点难过,欢迎所有建议。

class SortNames {

static void sort(String[] s) {
    for (int i = 0; i<s.length; i++) {
        for (int j = i+1; j < s.length; j++) {
            if (s[i].compareTo(s[j])>0) {
                String t;
                t = s[i]; s[i] = s[j]; s[j] = t;
            }
        }
    }
}

public static void main(String[] args) {
    String[] names = {"Pete","Jill","May","Anne","Tim"};             
    sort(names);
    for (int i=0; i<names.length; i++) 
        System.out.println(names[i]);
}
}
4

5 回答 5

5

变成,然后变成SortNames,这是如何工作的:SortNames<T extends Comparable<? super T>>String[]T[]Collections.sort()

public class SortNames<T extends Comparable<? super T>> {
    public void sort(T[] s) {
        for (int i = 0; i<s.length; i++) {
            for (int j = i+1; j < s.length; j++) {
                if (s[i].compareTo(s[j])>0) {
                    T t = s[i]; s[i] = s[j]; s[j] = t;
                }
            }
        }
    }
    // or static <T extends Comparable<? super T>> void, for static methods
}
于 2012-08-21T11:56:57.520 回答
3

如果要对数组进行排序,可以使用Arrays.sort(yourArray);.

如果你真的想用你的算法重新实现它(假设它有效),你只需要改变一些事情:

static <T extends Comparable<? super T>> void sort(T[] s) {
    for (int i = 0; i < s.length; i++) {
        for (int j = i + 1; j < s.length; j++) {
            if (s[i].compareTo(s[j]) > 0) {
                T t;
                t = s[i];
                s[i] = s[j];
                s[j] = t;
            }
        }
    }
}
于 2012-08-21T12:02:53.730 回答
0
class City {
   public static void main (String args[])
   { 
     int i,j;
     String temp;
     String s[] = new String[6];
     for(i=0; i<6; i++)
       s[i]=args[i];
     for(i=0;i<6;i++) {
       for(j=0;j<6-i-1;j++) {
         if(s[j].compareTo(s[j+1])>0)
         {
           temp=s[j];
           s[j]=s[j+1];
           s[j+1]=temp;
         } 
       }
     }
     for(i=0; i<6; i++) {
       System.out.println(s[i]);
     }
   }
}   

这个概念可以用于对任意 6 个字符串进行排序(字符串的数量可以由程序员增加)

于 2012-08-25T07:35:10.693 回答
0

您正在接受 String[] 排序方法,那么它将永远不会是通用的。

 static void sort(String[] s)

您是否看到集合的排序方法有任何优势。

public static <T extends Comparable<? super T>> void sort(List<T> list) {
    Object[] a = list.toArray();
    Arrays.sort(a);
    ListIterator<T> i = list.listIterator();
    for (int j=0; j<a.length; j++) {
        i.next();
        i.set((T)a[j]);
    }
  }
于 2012-08-21T12:00:27.090 回答
-3

您只需要为需要排序的对象实现可比较的接口,并对上面的代码进行一些更改,以使该代码可用于任何其他对象。

class SortNames {

static void sort(Comparable[] s) {
    for (int i = 0; i<s.length; i++) {
        for (int j = i+1; j < s.length; j++) {
            if (s[i].compareTo(s[j])>0) {
                Comparable t;
                t = s[i]; s[i] = s[j]; s[j] = t;
            }
        }
    }
}

public static void main(String[] args) {
    String[] names = {"Pete","Jill","May","Anne","Tim"};             
    sort(names);
    for (int i=0; i<names.length; i++) 
        System.out.println(names[i]);
}
}
于 2012-08-21T11:58:58.593 回答