使用Comparable接口实现选择排序

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



猜你喜欢

转载自blog.csdn.net/zai_xia/article/details/79603255