选择排序
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 }