Arrays.sort()的使用和原理

Java的Arrays类中有一个sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时,非常的好用。

jdk中的Arrays.sort()的实现是通过所谓的双轴快排的算法

1、Arrays.sort(int[] a)

这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序。

2、Arrays.sort(int[] a, int fromIndex, int toIndex)

这种排序对数组部分进行排序。例如:

int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
    Arrays.sort(a, 0, 3);

表示对数组a的0,1,2进行升序排序(不包含3)

3、public static void sort(T[] a,int fromIndex,int toIndex, Comparator c)

对泛型进行排序。

具体例子:

Person arr[]={
          new Person("迪丽热巴",18),
          new Person("古力娜扎",21),
          new Person("马尔扎哈",20)
        };
        Arrays.sort(arr,0,2, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()-o2.getAge();//标记1
            }
        });

在标记1中若返回值如下:

               返回-1(或负数),表示不需要交换01和02的位置,o1排在o2前面,asc

               返回1(或正数),表示需要交换01和02的位置,o1排在o2后面,desc

也就是说返回的是个正数则需要交换位置(降序)是负数就不需要(升序)

那为什么有return o2.a-o1.a就是降序排序

首先o2是第二个元素,o1是第一个元素。无非就以下这些情况:
①: o2.a > o1.a : 那么此时返回正数,表示需要调整o1,o2的顺序,也就是需要把o2放到o1前面,这不就是降序了么。

②:o2.a < o1.a : 那么此时返回负数,表示不需要调整,也就是此时o1 比 o2大, 不还是降序么。

因此就有return o1.a-o2.a就是升序排序

              return o2.a-o1.a就是降序排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值