【Java基础】数组的排序算法调用

本文介绍了Java中数组的排序方法,强调了sort函数在Array类中的使用。博主指出,通过实现Comparable接口或Comparator接口,可以对数组进行升序或降序排序。对于对象数组,可以通过两种方式排序:一是使用比较器对象,二是让对象类实现Comparable接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

排序语句的使用

博主初学java,之前使用的更多是C++来写竞赛类代码。初来乍到,很多操作都要重新学习java的版本。比如今天的主角:排序语句。

在程序设计过程中,排序算法是最常用到的算法之一,正是因为其经常用到,所以掌握利用已经设计好的算法语句,会大大提升程序设计过程中的效率。主要优点如下:

  1. 进行排序仅需要一句话,方便书写
  2. 设计好的算法,确保正确率
  3. 算法出自高手,保证运行效率

那么与C语言qsort和sort不同的是,Java语言中并不存在孤立的方法,所有的方法都在类中。所以,今天的主角sort函数,就出现在数组类Array中。

它的调用方式为:

Arrays.sort(Object[] o,int );

括号中,传递需要排序的数组,默认为升序排序。

那么这里就会产生几个问题

  1. 默认顺序为升序,想要降序该怎么办?
  2. 对象数组可以进行排序吗?

回答

在回答问题之前,我有必要引入两个十分相似的接口,comparable,comparator接口。
对象实现这两个接口,分别成为可比较对和比较器对象。

可比较对象

当一个类继承了Comparable接口并实现了CompareTo方法,那么该类实例化出的对象即为可比较对象。这个对象可与其它对象进行大小的比较。

比较器对象

当一个类继承了Comparator接口并实现了Compare方法,那么该类实例化出的对象即为比较器对象。这个对象可比较两个对象的大小。

贴一段代码举例:

class Person implements Comparable<Person>
{
	int age;
	Person(int age)
	{
		this.age = age;
	}
	public int compareTo(Person o) {
		return this.age - o.age;
	}
}

class Judge implements Comparator<Person>
{
	String name;
	Judge(String name)
	{
		this.name = name;
	}
	public int compare(Person o1, Person o2) {
		return o2.age - o1.age;
	}
	
}

在这一段代码中,Person类是可比较类,Judge类是比较器类

有了这样的铺垫,我就可以开始回答问题了。

问:默认顺序为升序,想要降序该怎么办?

答:想要获得降序排列,就必须为方法提供比较器,在比较器中重新定义比较规则。

默认排序算法中比较大小的方式是前者与后者运算使两者相减

为负则小
为零则等
为正则大

故可以重写比较器方法,让结果值取相反数,即可使数组降序。

相对应的,调用方法需改为:

Arrays.sort(数组,比较器对象);

比较方法写成:

public int compare(int a,int b)
{
	return b - a;
}
问:对象数组可以进行排序吗?

答:当然可以,有两种方法

  • 方法1:上一个问题中,我们提到了比较器对象在排序方法中的使用。对于对象数组,比较器的调用方式依旧适用。此时,我们的比较器的便需要可以比较对象大小。
    利用上文的两个类举例。比较器类Judge实现了比较方法,可以用来比较两个Person类对象。
    这时,我们实例化一个Person类对象数组person,再实例化一个Judge类对象judge便可使用语句进行排序了。写法:
Array.sort(person,judge);
  • 方法2:对象数组也可以像一般数组一样不通过比较器进行排序。不过这要求对象之间可进行大小比较。所以只需要我们让类实现Comparable接口,这样我们的对象就成了可比较对象,就可以参与排序了。

笔者水平有限,如有错误之处,欢迎指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值