选择排序
作者:互联网
package class01; /** * 选择排序 */ //思路:n个数,n次循环(10个数就是10次循环),每次循环找出本轮的最小值,和本轮的第一个位置的数,交换。周而复始。直至该乱序数组有序。 public class Code02_SelectionSort { public static void main(String[] args) { int[] arr = {8, 6, 4, 5, 11, 3, 2, 7, 9, 7, 8}; printArr(arr); selectSort(arr); printArr(arr); } public static void selectSort(int[] arr) { if (arr == null || arr.length < 2) { return; } int N = arr.length; //0~n-1范围上,做一堆事儿。 //1~n-1范围上,做一堆事儿。 //2~n-1范围上,做一堆事儿。 //... //即:i~n-1范围上,做一堆事儿。得出外层循环。i从0开始,i<n,即i<=n-1。 //所以一共是n次循环,第一次循环,找出在这个范围上的最小值的索引(使用的三元表达式), //让这个最小值(位置可能是第二个位置,可能在中间,也可能在最后一个位置),和本次循环的第一个位置(索引0)上的数,交换。此时第一个数不用管了,i就可以++了。 //第二次循环,第三次循环...周而复始。 for (int i = 0; i < N; i++) { int minValueIndex = i; for (int j = i + 1; j < N; j++) {//直接让i+1位置上的数,和最小值比较。 //如果从第二个数(含)往后,有比最小值还小的,则更新最小值索引为j。否则最小值的索引minValueIndex还是它自己。 minValueIndex = arr[j] < arr[minValueIndex] ? j : minValueIndex; } swap(arr, i, minValueIndex);//将最小值,和本轮循环的第一个位置的数,交换。 } } public static void printArr(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(); } public static void swap(int[] arr, int i, int j) { int t = arr[i]; arr[i] = arr[j]; arr[j] = t; }
}
标签:arr,一堆,int,选择,循环,排序,事儿,public 来源: https://www.cnblogs.com/TheFloorIsNotTooHot/p/16350362.html