java 数组排序的方法

从不依靠,从不寻找。非常沉默,非常骄傲。

欢迎大家批评指正!

一:Arrays里面的sort函数

1):基本数据类型升序排列:

  1. Arrays.sort(Object[]);
  2. Arrays.sort(Object[],l,r);给数组[l,r)区间的变量排序

2):基本数据类型降序排列:

  • 不好意思,查了api发现没有这个操作。你可以将升序排列后的数组再逆置,或者是你可以自定义排序函数。
  • 那么自定义怎样最快呢?建议看   3)自己定义的类 里面的第三段代码

3)自己定义的类 

  1. 让该类继承Comparable接口,重载compareTo函数。(第一段代码)(parallelSort和sort都可以,有兴趣自己查一下
  2. 让该类继承Comparator接口,重载Compare函数。
  3. 第二第三段代码是利用Comparator接口的两种方法。
  4. 讲一下Comparable接口和Comparator的区别:前者是内部排序,后者是外部排序。啥意思?一个类只要是继承了Comparable接口,那么这个类的对象都是可以有大小的。但是如果如果使用Comparator,表示的是外部排序,这个时候排序只是借用了外部的工具,自定义的这个类创建的对象之间并没有大小关系,只是能通过外部的方法进行排序而已。
//一:继承Comparable接口,重载compareTo函数
public class Test {
	public static void main(String[] argvs) {
		A a[]=new A[10];
		//初始化
		for(int i=0;i<10;i++) {
			a[i]=new A(i);
		}
		System.out.println("排序前的输出:");
		for(A tp:a) {
			System.out.print(tp.n+" ");
		}
		System.out.println();
		System.out.println("排序后的输出:");
		Arrays.sort(a,0,10);
		for(A tp:a) {
			System.out.print(tp.n+" ");
		}
	}
}
//继承Comparable
class A implements Comparable<A>{
	public int n;
	public A(int n){
		this.n=n;
	}
	@Override
	public int compareTo(A o) {
		if(this.n<o.n) return 1;
		else if(this.n>o.n) return -1;
		else return 0;
	}
	
}
二:重写Comparator里面的Compare函数,利用匿名类
public class Test {
	public static void main(String[] argvs) {
		A a[]=new A[10];
		//初始化
		for(int i=0;i<10;i++) {
			a[i]=new A(i);
		}
		System.out.println("排序前的输出:");//0 1 2 3 4 5 6 7 8 9 
		for(A tp:a) {
			System.out.print(tp.n+" ");
		}
		System.out.println();
		System.out.println("排序后的输出:");//9 8 7 6 5 4 3 2 1 0
		Arrays.sort(a,0,10,new Comparator<A>(){
			public int compare(A x, A y) {
				if(x.n>y.n) return -1;
				else if(x.n<y.n) return 1;
				else return 0;
			}
		});
		for(A tp:a) {
			System.out.print(tp.n+" ");
		}
	}
}
//继承Comparable
class A{
	public int n;
	public A(int n){
		this.n=n;
	}
}
三:通过一个类重载comparator接口来实现排序
package Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class Test {

	public static void main(String[] argvs) {
		A a[]=new A[10];
		//初始化
		for(int i=0;i<10;i++) {
			a[i]=new A(i);
		}
		System.out.println("排序前的输出:");
		for(A tp:a) {
			System.out.print(tp.n+" ");
		}
		//排序前0 1 2 3 4 5 6 7 8 9
		System.out.println();
		System.out.println("排序后的输出:");
		Arrays.sort(a,new mycom());
		//输出 9 8 7 6 5 4 3 2 1 0
		for(A tp:a) {
			System.out.print(tp.n+" ");
		}
	}
}

class mycom implements Comparator<A>{

	@Override
	public int compare(A o1, A o2) {
		if(o1.n<o2.n) return 1;
		else if(o1.n>o2.n) return -1;
		else return 0;
	}
}
//继承Comparable
class A{
	public int n;
	public A(int n){
		this.n=n;
	}
}

 

 

 

二:Collectiongs里面的sort函数

Collections.sort是对一个list进行排序,Arrays.sort是对一个普通数组进行排序。 

Arrays.sort()在里面元素不超过286的时候用的是快排!超过了之后,先判断数组是不是基本有序,如果不是还用快排(因为数组基本有序的情况下,用快排快退化到O(n^2)),否则用归并排序。Collectiongs.sort()其实就是对Arrays.sort()的调用!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值