数组元素排序的三种方法(附完整代码)
1.Arrays类进行数组排序
Java API对Arrays类的说明是:此类包含用来操作数组(比如排序和搜索)的各种方法。
Arrays类中的sort()使用的是“经过调优的快速排序法”;
1 package api.array.paixu; 2 3 import java.util.Arrays; 4 5 import static api.array.paixu.ArrayReverse.arrReverse; 6 import static api.array.paixu.SetArray.arrayIntSet; 7 8 public class PaiXu_1 { 9 public static void main(String[] args) { 10 int[] arr = arrayIntSet();//arrayIntSet()是从键盘获取数字返回数组 11 Arrays.sort(arr); 12 System.out.println("该数组元素从小到大排序:" + Arrays.toString(arr)); 13 /* 14 反转数组得到 arrReverse方法详细介绍
15 */ 16 System.out.println("该数组元素从大到小排序:" + Arrays.toString(arrReverse(arr))); 17 } 18 }
2.相邻数组元素比较大小,调换位置进行数组排序
嵌套循环结果,对相邻数组元素比较,满足Array[i]<Array[i+1]的,进行位置调换。
1 package api.array.paixu; 2 3 import java.util.Arrays; 4 5 import static api.array.paixu.ArrayReverse.arrReverse; 6 import static api.array.paixu.SetArray.arrayIntSet; 7 8 public class PaiXu_2 { 9 10 public static void main(String[] args) { 11 int[] arr = arrayIntSet();//arrayIntSet()是从键盘获取数字返回数组 12 for (int first = 0; first < arr.length; first++) { 13 for (int second = 0; second < arr.length; second++) { 14 if (arr[first] < arr[second]) { 15 int temp = arr[first]; 16 arr[first] = arr[second]; 17 arr[second] = temp; 18 } 19 } 20 } 21 System.out.println("该数组元素从小到大排序:" + Arrays.toString(arr)); 22 /* 23 反转数组得到 arrReverse方法详细介绍
24 */ 25 System.out.println("该数组元素从大到小排序:" + Arrays.toString(arrReverse(arr))); 26 } 27 }
3.利用ArrayList改变集合长度进行数组排序(详情)
Java API对ArrayList类的说明是:ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
利用ArrayList中add和Remove方法,获取并添加数组元素,然后找出数组元素最大值依次添加至新的集合,实现数组排序。
1 package api.array.paixu;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.Scanner;
6
7 import static api.array.paixu.SetArray.arrayIntSet;
8
9 public class PaiXu_3 {
10 public static void main(String[] args) {
11 ArrayList<Integer> list = new ArrayList<>();
12 ArrayList<Integer> list2 = new ArrayList<>();
13 int[] array = arrayIntSet();
14 for (int j : array) {
15 list.add(j);
16 }
17 //从大到小排列方法:
18 do {
19 int max = list.get(0);
20 for (Integer integer : list) {
21 if (integer >= max) {
22 max = integer;
23 }
24 }
25 list2.add(max);
26 list.remove((Integer) max); //获取ArrayList对应元素索引值:ArrayList.indexOf(元素名);
27 } while (!list.isEmpty());
28 System.out.println("从大到小:");
29 System.out.println(list2);
30 //恢复list到初始状态
31 for (int j : array) {
32 list.add(j);
33 }
34 list2.clear();
35 //从小到大排列方法:
36 do {
37 int min = list.get(0);
38 for (Integer integer : list) {
39 if (integer <= min) {
40 min = integer;
41 }
42 }
43 list2.add(min);
44 list.remove((Integer) min); //获取ArrayList对应元素索引值:ArrayList.indexOf(元素名);
45 } while (!list.isEmpty());
46 System.out.println("从小到大:");
47 System.out.println(list2);
48 }
49 }
执行输出:
代码中需要用到的两个方法:
1.定义Int数组 arrayIntSet()
1 package api.array.paixu;
2
3 import java.util.Arrays;
4 import java.util.Scanner;
5
6 public class SetArray {
7 public static int[] arrayIntSet() { //将从键盘输入的数字放进一个数组
8 Scanner sc = new Scanner(System.in);
9 System.out.println("请输入数组元素的个数:");
10 int sum = sc.nextInt();
11 int[] arr = new int[sum];
12 for (int i = 0; i < sum; i++) {
13 System.out.print("请输入第" + (i + 1) + "个元素:");
14 arr[i] = sc.nextInt();
15 }
16 System.out.println("输入的数组为:" + Arrays.toString(arr));
17 return arr;
18 }
19 }
2.数组元素反转:(点击查看详细介绍)
1 package api.array.paixu;
2
3 public class ArrayReverse {
4 public static int[] arrReverse(int[] array) {
5 for (int first = 0, last = array.length - 1; first < last; first++, last--) {
6 int temp;
7 temp = array[first];
8 array[first] = array[last];
9 array[last] = temp;
10 }
11 return array;
12 }
13 }