使用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;
}
}