【java】选择排序及其优化
选择排序规则:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放待排序序列的起始位置(或末尾位置),直到全部待排序的数据元素排完
动态图:

代码
public static void main(String[] args) { int[] arr = new int[] { 99, 54, 2, 12, 3, 33 }; System.out.println(Arrays.toString(arr)); selectSortOpt(arr); System.out.println(Arrays.toString(arr)); } static void selectSort(int[] arr) { for (int i = 0; i < arr.length; i++) { int minPos = i; for (int j = i + 1; j < arr.length; j++) { // 只取最小值 if (arr[minPos] < arr[j]) { minPos = j; } } swap(arr, minPos, i); } } static void swap(int[] arr, int addr1, int addr2) { if (addr1 == addr2) { return; } arr[addr1] = arr[addr1] ^ arr[addr2]; arr[addr2] = arr[addr1] ^ arr[addr2]; arr[addr1] = arr[addr1] ^ arr[addr2]; }
public static void main(String[] args) { int[] arr = new int[] { 65, 34, 88, 12, 100, 2 }; System.out.println(Arrays.toString(arr)); selectSort(arr); System.out.println(Arrays.toString(arr)); } static void selectSort(int[] arr) { for (int i = 0; i < arr.length; i++) { int minPos = i; int maxPos = i; for (int j = i + 1; j < arr.length - i; j++) { if (arr[minPos] < arr[j]) { minPos = j; } if (arr[maxPos] > arr[j]) { maxPos = j; } } if (minPos == i && maxPos != arr.length - i - 1) { //1 min___ swap(arr, maxPos, arr.length - i - 1); } else if (minPos != i && maxPos == arr.length - i - 1) { // 1 ___max swap(arr, minPos, i); } else if (maxPos == i && minPos == arr.length - i - 1) { //2 max__min swap(arr, minPos, maxPos); } else if (maxPos != i && minPos == arr.length - i - 1) { //3 __min swap(arr, minPos, i); swap(arr, maxPos, arr.length - i - 1); } else { //4 max__ + 其他 swap(arr, maxPos, arr.length - i - 1); swap(arr, minPos, i); } } } static void swap(int[] arr, int addr1, int addr2) { if (addr1 == addr2) { return; } arr[addr1] = arr[addr1] ^ arr[addr2]; arr[addr2] = arr[addr1] ^ arr[addr2]; arr[addr1] = arr[addr1] ^ arr[addr2]; }
这个只记住同时取最大值+最小值的算法就好,毕竟是优化算法

浙公网安备 33010602011771号