Arrays.sort()的用法记录

Arrays.sort()的用法记录

1、Arrays.sort(int[] a)

import java.util.Arrays;

public class Main {
     public static void main(String[] args) {
           
         int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
         Arrays.sort(a);
         for(int i = 0; i < a.length; i ++) {
              System.out.print(a[i] + " ");
         }
     }
  
 }

在这里插入图片描述

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

import java.util.Arrays;

public class Main {
     public static void main(String[] args) {
           
         int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
         //注意是左闭右开
         Arrays.sort(a, 0, 3);
         for(int i = 0; i < a.length; i ++) {
              System.out.print(a[i] + " ");
         }
     }
  
 }
 

在这里插入图片描述

3、public static void sort(T[] a,int fromIndex,int toIndex, Comparator c)其中索引参数可有可无,参考一、二

import java.util.Arrays;
import java.util.Comparator;

public class TestArrays {
    public static void main(String[] args) {
        //注意,要想改变默认的排列顺序,不能使用基本类型(int,double, char)
        //而要使用它们对应的类
        Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
        //定义一个自定义类MyComparator的对象
        Comparator cmp = new MyComparator();
        Arrays.sort(a, cmp);
        for(int i = 0; i < a.length; i ++) {
            System.out.print(a[i] + " ");
        }
    }
}
//Comparator是一个接口,所以这里我们自己定义的类MyComparator要implements该接口
class MyComparator implements Comparator<Integer>{
    @Override
    public int compare(Integer o1, Integer o2) {
        //return o1-o2 是升序,即o1 > o2 返回正数 现在颠倒即可降序
        //如果o1小于o2,我们就返回正值,如果n1大于n2我们就返回负值,
        //这样颠倒一下,就可以实现反向排序了
//        if(o1 < o2) {
//            return 1;
//        }else if(o1 > o2) {
//            return -1;
//        }else {
//            return 0;
//        }


        return o2 - o1;
    }

}

在这里插入图片描述

4、其他写法

** 对于第三种也可以使用简写,不用封装成类**

import java.util.Arrays;
import java.util.Comparator;

public class TestArrays {
    public static void main(String[] args) {

        Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
        //和上面的类似,只是直接把类的实现作为参数
        Arrays.sort(a, new Comparator<Integer>(){

            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });
        
        for(int i = 0; i < a.length; i ++) {
            System.out.print(a[i] + " ");
        }
    }

}

还可以再简单点

import java.util.Arrays;

public class TestArrays {
    public static void main(String[] args) {

        Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
        Arrays.sort(a, (o1, o2) -> o1 - o2);

        for(int i = 0; i < a.length; i ++) {
            System.out.print(a[i] + " ");
        }
    }

}

不过貌似不太好,会提示转换为, 也就是下面这样。看源码没太看懂,有大佬可以告诉一下,不懂这个参数是怎么用的
在这里插入图片描述

import java.util.Arrays;
import java.util.Comparator;

public class TestArrays {
    public static void main(String[] args) {

        Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
        Arrays.sort(a, Comparator.comparingInt(o -> o));

        for(int i = 0; i < a.length; i ++) {
            System.out.print(a[i] + " ");
        }
    }

}

5、二维数组的写法

数组排序就是把数组的元素进行排序,二维数组的元素即是一维数组,把相应的元素类型改成一维数组即可

Arrays.sort(p, new Comparator<int[]>() {
	public int compare(int[] p1, int[] p2) {
		return p1[1] - p2[1];
	}
});
//或者
Arrays.sort(p, (p1, p2) -> p1[1] - p2[1]);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Java中的Arrays.sort()方法使用的是快速排序算法,它是一种基于比较的排序算法。快速排序的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再分别对这两部分记录继续进行排序,以达到整个序列有序的目的。在实现过程中,快速排序采用了分治的思想,将待排序的序列分成若干个子序列,对每个子序列进行排序,最终合并成一个有序的序列。快速排序的时间复杂度为O(nlogn),是一种高效的排序算法。 ### 回答2: Java中的Arrays类提供了一个sort方法,该方法可以对数组进行排序。排序算法使用的是快速排序算法。 快速排序算法是一种分治算法,其思想是将数组划分为较小和较大的两个子数组,然后递归地排序两个子数组。基本步骤如下: 1.选定数组中的一个元素作为枢轴(pivot),通常选择第一个或最后一个元素。 2.将数组分成两个子数组:小于枢轴的元素和大于枢轴的元素。 3.递归地对小数组和大数组进行排序。 4.将小数组、枢轴和大数组合并起来形成有序数组。 在实现Arrays.sort方法时,Java使用了优化快速排序算法。在排序过程中,Java将小数组使用插入排序算法进行排序,提高了性能。此外,Java还使用了“三点检查”策略来选择中间元素,以防止快速排序算法恶化为O(n^2)的运行时间。 总之,Java的Arrays.sort方法使用的是优化的快速排序算法,该算法通过递归地将数组划分为两个子数组来排序。在排序过程中,小数组使用插入排序算法进行排序。此外,Java还使用“三点检查”策略来选择中间元素以防止算法的恶化。 ### 回答3: Java中的Arrays类为我们提供了一种快速对数组进行排序的方法,即Arrays.sort()方法。Arrays.sort()方法的排序原理是使用了快速排序(QuickSort)算法,这是一种常见且高效的排序算法。 快速排序算法的基本思想是选择一个基准数(pivot),将数组中小于基准数的元素放在基准数左侧,大于基准数的元素放在基准数右侧,然后对左右两侧的子数组递归进行同样的操作。当子数组中只有一个元素或者为空时,排序完成。 快速排序算法的优点是运行时间较短,通常比其他O(n log n)算法快得多。而Arrays.sort()方法又通过使用基本类型的快速排序算法、合并排序算法和插入排序算法三种排序算法的结合,提高了排序效率。具体地说,Arrays.sort()方法根据被排序的数组的大小和元素的数据类型来在三种算法之间做出选择,并且为了提高排序效率,对基本类型采用了双轴快速排序;对于对象数组,Arrays.sort()方法采用了归并排序和插入排序。 双轴快速排序是一个改进版的快速排序,它使用两个pivot来分割数组,从而更加快速和稳定。因为快速排序算法在处理大集合时可能会发生很多的交换操作,但这些交换操作会比较费时,在数组非常大时,复杂度会达到O(n^2)。而双轴快速排序避免了这种情况,使得排序效率得到了很好的提升。 综上所述,Arrays.sort()方法通过使用不同的排序算法,根据数据类型和数组大小的不同进行判断,选择最适合的排序算法,提高排序效率,以达到对数组排序的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BUG--ER

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值