排序算法

选择排序

 

 1 public class MySelectionSort {
 2 
 3 
 4     public static void main(String[] args) {
 5         for (int i = 0; i < 100; i++) {
 6             int[] array = generateRandomArray(10, 10);
 7             System.out.println("随机数组:" + Arrays.toString(array));
 8             int[] copyArray = Arrays.copyOf(array, array.length);
 9             Arrays.sort(copyArray);
10             System.out.println("Arrays工具类排序:" + Arrays.toString(copyArray));
11             selectionSort(array);
12             System.out.println("选择排序法排序:" + Arrays.toString(array));
13             IntArrayComparator intArrayComparator = new IntArrayComparator();
14             int compare = intArrayComparator.compare(copyArray, array);
15             if (compare == 0){
16                 System.out.println("----------------------------排序成功------------------------");
17             }else{
18                 System.out.println("----------------------------排序失败------------------------");
19                 throw new RuntimeException("排序失败");
20             }
21         }
22 
23     }
24 
25     /**
26      * 生成一个[-maxValue,maxValue]的随机数组
27      *
28      * @param maxSize  最大长度
29      * @param maxValue 最大值
30      * @return 随机数组
31      */
32     private static int[] generateRandomArray(int maxSize, int maxValue) {
33         int[] array = new int[maxSize];
34         for (int i = 0; i < maxSize; i++) {
35             array[i] = (int) ((maxValue + 1) * Math.random()) - (int) ((maxSize + 1) * Math.random());
36         }
37         return array;
38     }
39 
40     /**
41      * 排序数组
42      *
43      * @param array
44      */
45     private static void selectionSort(int[] array) {
46         //比较流程
47         //比较0->1,2,3,4...array.length-1
48         //比较1->2,3,4,5...array.length-1
49         //比较2->3,4,5,6...array.length-1
50         //.
51         //.
52         //.
53         //比较array.length-2->array.length-1
54 
55         //最外层[0,array.length-2]
56         for (int i = 0; i < array.length-1; i++) {
57             int minIndex = i;
58             //内层[比最外层下标大一,array.length-1]
59             for (int j = i + 1; j < array.length; j++) {
60                 if (array[minIndex] > array[j]) {
61                     minIndex = j;
62                 }
63             }
64             swap(array, i, minIndex);
65         }
66     }
67 
68     public static void swap(int[] array, int i, int j) {
69         if(i!=j){
70             int swap = array[i];
71             array[i] = array[j];
72             array[j] = swap;
73         }
74     }
75 
76     public static class IntArrayComparator implements Comparator<int[]> {
77         @Override
78         public int compare(int[] o1, int[] o2) {
79             if (o1 == null || o2 == null) {
80                 throw new RuntimeException("比较的两个数据不能为null");
81             }
82             if (o1.length != o2.length) {
83                 return -1;
84             }
85             for (int i = 0; i < o1.length; i++) {
86                 if (o1[i] != o2[i]) {
87                     return 1;
88                 }
89             }
90             return 0;
91         }
92     }
93 }

 

上一篇:Day2 线段树和树状数组


下一篇:关于 TabControl 获取 被鼠标右键的 TabPage 而编写的函数...