使用Comparable接口实现多种数据类型的选择排序
1.SelectionSortComparable.java
public class SelectionSortComparable { /* * 排序算法 * @param Comparable[] arr 将要排序的数组(可以是任意类型的数据) * */ public static void sort(Comparable[] arr) { int n = arr.length; for(int i=0; i<n; i++) { for(int j=i+1; j<n; j++) { if(arr[j].compareTo(arr[i]) < 0) { swap(arr, i, j); } } } } /* * 交换算法 * @param Object[] arr 待排序的数组 * @param int j * @param int i * */ public static void swap(Object[] arr, int i, int j) { Object t = arr[i]; arr[i] = arr[j]; arr[j] = t; } /* * 打印输出数组的内容 * @param Object[] arr 需要打印的数组 * */ public static void printArray(Object[] arr) { for(int i=0; i<arr.length; i++) System.out.println(arr[i]); } public static void main( String[] args) { //测试整数型排序 Integer[] a = {10, 5, 3, 1, 6, 8, 7, 9, 4, 2}; //此处必须使用Integer类型而不是int类型 sort(a); printArray(a); //测试字符串 // String[] b = {"B", "a", "c", "D"}; // sort(b); // printArray(b); //测试双精度数 // Double[] c = {2.1, 1.1, 5.3, 3.14}; // sort(c); // printArray(c); /* * 测试自定义的类 Student * */ // Student[] d = new Student[4]; // d[0] = new Student("D",90); // d[1] = new Student("C",100); // d[2] = new Student("B",95); // d[3] = new Student("A",95); // sort(d); // printArray(d); } }
2.Student.java
public class Student implements Comparable<Student> { private String name; private int score; public Student(String name, int score) { this.name = name; this.score = score; } /* * 重写Student的Comparable()函数 * 如果分数相等,则按照名字的字母顺序输出 * 如果分数不等,则按照分数由小到大输出 * @param Student that 另一个对象 * @return int a 通过a值判断谁大谁小 * */ @Override public int compareTo(Student that) { if(this.score > that.score) return -1; else if(this.score < that.score) return 1; else return this.name.compareTo(that.name); } /* * 定义Student的输出打印方式 * */ @Override public String toString() { return "Student: " + this.name + " " + this.score; } }