数据结构与算法:对象排序

前面都是对基本数据类型的数据进行排序,如:冒泡排序,选择排序,插入排序。如何对引用类似的对象进行排序?

先封装一个Student类:

public class Student {
	private int stuNo;
	private String name;
	private String gender;
	private int age;
	public Student(int stuNo, String name, String gender, int age) {
		this.stuNo = stuNo;
		this.name = name;
		this.gender = gender;
		this.age = age;
	}
	public int getStuNo() {
		return stuNo;
	}
	public void setStuNo(int stuNo) {
		this.stuNo = stuNo;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
	
}

再写一个对象排序的封装类:

public class ObjectSort {
	private Student[] arr;
	private int cloum;
	
	public ObjectSort(){
		arr=new Student[10];
	}
	public ObjectSort(int cloum){
		arr=new Student[cloum];
	}
	
	//插入对象
	public void insert(Student stu){
		arr[cloum]=stu;
		cloum++;
	}
	//显示对象
	public void display(){
		for(int i=0;i<cloum;i++){
			System.out.println("学号:"+arr[i].getStuNo()+",姓名:"+arr[i].getName()+
					",性别:"+arr[i].getGender()+",年龄:"+arr[i].getAge());
		}
		
	}
	//对象排序(通过学号)
	public void sortByStuNO(){
		int min=0;
		for(int i=0;i<cloum-1;i++){
			min=i;
			int j;
			for(j=i;j<cloum;j++){
				if(arr[j].getStuNo() < arr[min].getStuNo()){
					min=j;
				}
			}
			Student temp=arr[i];
			arr[i]=arr[min];
			arr[min]=temp;
		}
	}
	
	//对象排序(通过String 类型的姓名)
	public void sortByName(){
		int min;
		Student temp;
		for(int i=0;i<cloum-1;i++){
			 min=i;
			for(int j=i;j<cloum;j++){
				if(arr[j].getName().compareTo(arr[min].getName())<0){
					min=j;
				}
			}
			temp=arr[i];
			arr[i]=arr[min];
			arr[min]=temp;
		}
	}
}

然后是测试类:

public class TestObjectSort {
	public static void main(String[] args) {
		ObjectSort arr=new ObjectSort();
		Student stu1=new Student(101, "f张三", "男", 23);
		Student stu2=new Student(211, "c李四", "女", 22);
		Student stu3=new Student(402, "b王五", "男", 24);
		Student stu4=new Student(123, "d赵六", "女", 26);
		Student stu5=new Student(108, "a钱八", "男", 24);
		Student stu6=new Student(306, "e孙九", "男", 29);
		arr.insert(stu1);
		arr.insert(stu2);
		arr.insert(stu3);
		arr.insert(stu4);
		arr.insert(stu5);
		arr.insert(stu6);
		System.out.println("通过学号进行对象排序前:--------------");
		arr.display();
		System.out.println("通过学号进行对象排序后:--------------");
		arr.sortByStuNO();
		arr.display();
		System.out.println("通过姓名比较进行对象排序后:------------");
		arr.sortByName();
		arr.display();
	}
}

结果显示如下:

通过学号进行对象排序前:--------------
学号:101,姓名:f张三,性别:男,年龄:23
学号:211,姓名:c李四,性别:女,年龄:22
学号:402,姓名:b王五,性别:男,年龄:24
学号:123,姓名:d赵六,性别:女,年龄:26
学号:108,姓名:a钱八,性别:男,年龄:24
学号:306,姓名:e孙九,性别:男,年龄:29
通过学号进行对象排序后:--------------
学号:101,姓名:f张三,性别:男,年龄:23
学号:108,姓名:a钱八,性别:男,年龄:24
学号:123,姓名:d赵六,性别:女,年龄:26
学号:211,姓名:c李四,性别:女,年龄:22
学号:306,姓名:e孙九,性别:男,年龄:29
学号:402,姓名:b王五,性别:男,年龄:24
通过姓名比较进行对象排序后:------------
学号:108,姓名:a钱八,性别:男,年龄:24
学号:402,姓名:b王五,性别:男,年龄:24
学号:211,姓名:c李四,性别:女,年龄:22
学号:123,姓名:d赵六,性别:女,年龄:26
学号:306,姓名:e孙九,性别:男,年龄:29
学号:101,姓名:f张三,性别:男,年龄:23
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值