数组排序

  1. 从小到大进行排序
    1. 1)针对数组的所有元素
    2. 2)针对数组的部分元素
  2. 从大到小进行排序
    1. 1)针对数组的所有元素
    2. 2)针对数组的部分元素

数组的排序是很常见,我们只需要调用JDK提供的Arrays.sort()就可以实现排序。

从小到大进行排序

1)针对数组的所有元素

public static void main(String[] args) {
    int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
    Arrays.sort(ns);
    // 排序后:
    System.out.println(Arrays.toString(ns));  // [8, 12, 18, 28, 36, 50, 65, 73, 89, 96]
}

2)针对数组的部分元素

只针对数组某一部分排序,需要额外传入类似左闭右开的 [) 区间的 两个参数,如下 Arrays.sort(ns, 3, 6) 表示对数组ns[3]到ns[6-1]的元素(73,65,18)从小到大排序。

public static void main(String[] args) {
    int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
    Arrays.sort(ns, 3, 6);
    // 排序后:
    System.out.println(Arrays.toString(ns));  // [28, 12, 89, 18, 65, 73, 96, 50, 8, 36]
}

从大到小进行排序

默认是从小到大进行排序,如果要实现从大到小排序就需要重写Comparator接口中的compare()方法。需要注意的是所排序的必须是Integer对象,所以我们需要创建一个新的Integer类型的数组,然后把旧数组的数据填充到新数组,对新数组进行排序。

1)针对数组的所有元素

public static void main(String[] args) {
    int[] origin = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
    Integer[] result = new Integer[origin.length];

    // 创建一个Integer类型的数组
    for (int i = 0; i < origin.length; i++) {// 遍历将arr数组的值装入新数组
        result[i] = origin[i];

    }

    // 原来是return o1-o2,颠倒一下就实现反向排序
    Arrays.sort(result, (o1, o2) -> {
        return o2 - o1;
    });

    System.out.print(Arrays.toString(result));  //  [96, 89, 73, 65, 50, 36, 28, 18, 12, 8]
}

2)针对数组的部分元素

public static void main(String[] args) {
    int[] origin = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
    Integer[] result = new Integer[origin.length];

    // 创建一个Integer类型的数组
    for (int i = 0; i < origin.length; i++) {// 遍历将arr数组的值装入新数组
        result[i] = origin[i];

    }

    // 原来是return o1-o2,颠倒一下就实现反向排序
    Arrays.sort(result, 5,8,(o1, o2) -> {
        return o2 - o1;
    });

    System.out.print(Arrays.toString(result));  //  [28, 12, 89, 73, 65, 96, 50, 18, 8, 36]
}

他の者にできたか?ここまでやれたか?この先できるか?いいや、仆にしかできない!

目录
×

喜欢就点赞,疼爱就打赏