选择排序的思想:
选择排序(select sorting)也是一种简单的排序方法,它的基本思想是:
第一次排序从arr[0] ~ arr[n-1]中选取最小值,与arr[0]交换,
第二次排序从arr[1] ~ arr[n-1]中选取最小值,与arr[1]交换,
第三次排序从arr[2] ~ arr[n-1]中选取最小值,与arr[2]交换,
......
最后:第 n-1 次排序从arr[n-2] ~ arr[n-1]中选取最小值,与arr[n-1]交换
即:
第 i 次排序从arr[i-1] ~ arr[n-1]中选取最小值,与arr[i-1]交换;总共通过n-1次的比较,得到一个从小到大的数列
1 import java.util.Arrays; 2 3 //选择排序演变过程 4 public class SelectSortEvolution { 5 6 public static void main(String[] args) { 7 int[] arr = {101,34,119,1}; 8 int n = 1; 9 //假定第一个元素为最小值 10 int minIndex = 0; //最小值元素的索引 11 int min = arr[minIndex]; //最小值 12 for(int i = 1; i < arr.length; i++) { 13 if (arr[i] < min) { 14 minIndex = i; //替换最小值的索引 15 } 16 } 17 //第一轮循环结束,找到了最小元素的索引位置,与第一个元素进行交换 18 int tmp = arr[0]; 19 arr[0] = arr[minIndex]; 20 arr[minIndex] = tmp; 21 System.out.println("第" + (n++) + "轮比较后:" + Arrays.toString(arr)); 22 23 //假定第二个元素为最小值 24 minIndex = 1; //最小值元素的索引 25 min = arr[minIndex]; //最小值 26 for(int i = 2; i < arr.length; i++) { 27 if (arr[i] < min) { 28 minIndex = i; //替换最小值的索引 29 } 30 } 31 //第一轮循环结束,找到了最小元素的索引位置,与第一个元素进行交换 32 tmp = arr[1]; 33 arr[1] = arr[minIndex]; 34 arr[minIndex] = tmp; 35 System.out.println("第" + (n++) + "轮比较后:" + Arrays.toString(arr)); 36 37 //假定第三个元素为最小值 38 minIndex = 2; //最小值元素的索引 39 min = arr[minIndex]; //最小值 40 for(int i = 3; i < arr.length; i++) { 41 if (arr[i] < min) { 42 minIndex = i; //替换最小值的索引 43 } 44 } 45 //第一轮循环结束,找到了最小元素的索引位置,与第一个元素进行交换 46 tmp = arr[2]; 47 arr[2] = arr[minIndex]; 48 arr[minIndex] = tmp; 49 System.out.println("第" + (n++) + "轮比较后:" + Arrays.toString(arr)); 50 } 51 }
得出规律后的代码:
1 import java.util.Arrays; 2 3 //选择排序 4 public class SelectSort { 5 public static void main(String[] args) { 6 int[] arr = {10,34,119,11}; 7 int tmp = 0; //用于交换 8 for(int i = 0; i < arr.length; i++) { //外层循环控制比较的趟数 9 int min = arr[i]; 10 int minIndex = i; 11 for(int j = i+1; j < arr.length; j++) { //内层循环控制每趟比较的次数 12 if (arr[j] < min) { //说明在后边的元素中找到了比当前元素更小的数据 13 min = arr[j]; //更换最小值 14 minIndex = j; //更换最小值的索引 15 } 16 } 17 //至此,本次循环得到最小数的索引,进行交换 18 if (minIndex != i) { //说明当前元素已经为最小值,进行交换进行【防止无效交换:即当前元素已为待排序数中的最小值】 19 tmp = arr[i]; 20 arr[i] = arr[minIndex]; 21 arr[minIndex] = tmp; 22 System.out.println("第" + (i+1) + "趟排序:" + Arrays.toString(arr)); 23 } 24 25 } 26 System.out.println("最终排序结果:" + Arrays.toString(arr)); 27 } 28 }
如上图,第一趟比较中10已经为最小的数了,就不再参加无为的交换。
标签:minIndex,arr,15,--,元素,int,最小值,排序 From: https://www.cnblogs.com/yumengqifei/p/16587836.html