java中Arrays的排序介绍

1 一维数组

有一下几种排序方式:

  • 默认顺序排序
    int [] a = {4,5,3,1,7};
    Arrays.sort(a);
    
  • 倒序排序
  1. 使用Collections.reverseOrder()对其进行倒序排序,但是必须将数据的类型改成`Integer类型,否则不能进行。
    Integer [] a = {4,5,3,1,7}; 
    Arrays.sort(a, Collections.reverseOrder());
    
  2. 实现Comparator接口中的Compare()方法
    单独实现该接口:
    class MyComparator implements Comparator<Integer>{
        @Override
        public int compare(Integer o1, Integer o2) {
            return o2-o1;
        }
    }
    Integer [] a = {4,5,3,1,7};
    MyComparator myComparator = new MyComparator();
    Arrays.sort(a, myComparator);
    
    使用匿名类的方式实现:
    Integer [] a = {4,5,3,1,7};
    Arrays.sort(a, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o2 - o1;
        }
    });
    

2 二维数组

如果是升序,是o1 - o2,如果是倒序则是o2 - o1

  • 按二维数组的行进行排序:

    int[][] a = new int[][]{
       {4,5},{0,1},{1,2},{1,3},{2,5},{3,4}
    };
    Arrays.sort(a, Comparator.comparingInt(o -> o[0]));
    //Arrays.sort(a, (o1, o2) -> (o1[0] - o2[0]);//匿名
    

    排序结果为:

    0 1
    1 2
    1 3
    2 5
    3 4
    4 5

  • 按二维数组的列进行排序

    int[][] a = new int[][]{
    	{4,5},{0,1},{1,2},{1,3},{2,5},{3,4}
    };
    Arrays.sort(a, (o1, o2) -> (o1[1] - o2[1]));
    

    排序结果为:

    0 1
    1 2
    1 3
    3 4
    4 5
    2 5

### 回答1: Java中的Arrays.sort()方法使用的是快速排序算法,它是一种分治算法,将一个大问题分成两个小问题,然后递归地解决这些小问题,最后将结果合并起来。快速排序的基本思想是选取一个基准元素,将数组中小于基准元素的元素放在基准元素的左边,大于基准元素的元素放在基准元素的右边,然后对左右两个子数组分别进行快速排序,直到整个数组有序。在实现过程中,快速排序使用了双指针的思想,即左指针和右指针,通过交换元素的位置来实现排序快速排序的时间复杂度为O(nlogn),是一种高效的排序算法。 ### 回答2: java中的arrays.sort是用来对数组进行排序的方法,其原理是基于快速排序算法实现的。快速排序算法是一种分治思想的算法,通过不断地将待排序的序列分为两个子序列,其中一个子序列的所有元素都比另一个子序列的所有元素小,然后再对每个子序列分别进行排序,最终完成整个序列的排序。在具体实现时,快速排序算法采用了递归和指针技术来实现,算法的基本思路如下: 1.选取基准元素 快速排序算法中的第一步是选取一个基准元素,通常情况下是在待排序序列的第一个元素或任意一个元素中选择。 2.分割 选定基准元素后,将序列中的其他元素分成两个部分,一部分是小于等于基准元素的元素,另一部分是大于基准元素的元素。 3.递归 递归地对小于等于基准元素的子序列和大于基准元素的子序列进行排序,直到序列被分割成只有一个元素为止。 4.合并 将所有子序列中的元素合并成为一个有序序列,排序完成。 在java中,由于不同类型的数组排序的实现方式不同,因此在arrays.sort方法中采用了不同的底层实现算法,包括基于归并排序和基于双轴快速排序的算法。在大多数情况下,java中的arrays.sort方法采用的是双轴快速排序算法,它相比于一般的快速排序算法,具有更好的性能表现。双轴快速排序算法的基本思路是在分割阶段,将待排序序列分成两部分,一部分是小于等于基准元素的元素,另一部分是大于基准元素的元素。在java中,arrays.sort方法在实现双轴快速排序算法时,采用了基于三向切分的分割方法,它可以处理存在大量重复元素的数组,从而提高排序的效率。在java实现的双轴快速排序算法中,对于长度小于47的子序列,会采用插入排序算法进行排序。 ### 回答3: Java中的Arrays.sort()方法是对一个数组进行排序的静态方法。该方法可以对含有基本数据类型和String类型的数组进行排序排序是将一个无序的数组进行按照一定规则排序的过程。 JavaArrays.sort()方法采用了快速排序算法。具体来说,这种排序法是一种基于分治的排序算法,它采用了递归的思想,在待排序的序列中选择一个元素作为基准,然后将小于基准的元素放在左侧,大于基准的元素放在右侧,最后将左侧和右侧分别快速排序之后进行合并。 快速排序算法的时间复杂度为O(nlogn),是非常高效的排序算法JavaArrays.sort()方法默认采用的就是快速排序算法,但是在Java 7之后,如果要对基本类型的数组进行排序,由于有些排序算法更适合处理某些类型的数据,在使用Arrays.sort()方法的时候实际上会采用双轴快速排序算法。 对于String类型的数组排序Arrays.sort()方法默认采用的是Timsort算法。Timsort算法适用于大多数实际情况,因为它能在保持与归并排序一样的稳定性和与快速排序类似的速度之间实现很好的平衡。Timsort是从归并排序和插入排序的优点中发展出来的。 总之,JavaArrays.sort()方法是一种非常高效的排序算法,它采用了快速排序算法或Timsort算法来实现。对于基本类型的数组,还可以使用双轴快速排序算法进行排序。无论哪种排序算法,都能够快速地对数组进行排序,适用于各种实际场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值