public class Day32_Code_SelectSort { public static void selectionSort(int[] arr) { if (arr == null || arr.length < 2) { return; } // 0 ~ N-1 找到最小值,在哪,放到0位置上 // 1 ~ n-1 找到最小值,在哪,放到1位置上 // 2 ~ n-1 找到最小值,在哪,放到2位置上 // n-1 ~ n-1 最后整个数组有序 /* 选择排序原理:选择最小的放在前面; i = 0 --> 比较N-1次 i = 1 --> 比较N-2次 */ // 选择排序 for (int i = 0; i < arr.length - 1; i++) { int minIndex = i; for (int j = i + 1; j < arr.length; j++) { /* 0 1 2 3 4 [5, 2, 4, 1, 3] i = 0 j 从1 -> 4 minIndex = 0; j = 1时 arr[j] = 2 arr[minIndex] = arr[0] = 5 minIndex = j = i j = 2时 arr[j] = 4 arr[minIndex] = arr[0] = 2 minIndex = 1 j = 3时 arr[j] = 1 arr[minIndex] = arr[0] = 2 minIndex = j = 3 j = 4时 arr[j] = 3 arr[minIndex] = arr[0] = 1 minIndex = 3 0 1 2 3 4 [1, 5, 3, 4, 2] i = 1 j 从 2 -->4 minIndex = i = 1; j = 2 arr[j] = 3 arr[minIndex] = 5 minIndex = 2 j = 3 arr[j] = 4 arr[minIndex] = 3 minIndex = 2 j = 4 arr[j] = 2 arr[minIndex] = 3 minIndex = 4 swap(arr, i, minIndex) */ if (arr[j] < arr[minIndex]) { minIndex = j; } } swap(arr, i, minIndex); } // for (int i = 0; i < arr.length - 1; i++) { // int minIndex = i; // for (int j = i + 1; j < arr.length; j++) { // i ~ N-1 上找最小值的下标 // minIndex = arr[j] < arr[minIndex] ? j : minIndex; // } // swap(arr, i, minIndex); // } } public static void swap(int[] arr, int i, int minIndex){ // 先储存i位置上的值 临时变量 int tmp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = tmp; } public static void printArrays(int[] arr){ for(int i = 0; i < arr.length; i++){ System.out.print(arr[i]); System.out.print(" "); } } public static void main(String[] args) { int[] arr = {5, 3, 1, 2, 4}; selectionSort(arr); printArrays(arr); } }
Java 选择排序
最新推荐文章于 2024-07-10 21:37:49 发布