数组排序
数组的排序是很常见,我们只需要调用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]
}
他の者にできたか?ここまでやれたか?この先できるか?いいや、仆にしかできない!