标签:pre 相等 位置 交互 最小值 代码 code mini 12px
一,选择排序的思想:
①先假设第一个数最小的,然后拿这个数去和后面的n个数依次进行比较,
②如果发现有比最小值还小的数 则通过中间变量记录下下标和值,
③然后继续拿这个最小值往后进行比较,如果又发现比最小值还小的值 就执行第②步,直到比完最后一个元素
④最后把存在中间变量的最小值和最小值的下标 和假设的那个最小值进行交换
二,示例演示
示例过程:
2, 1, 4, 3
①2和 1, 4 ,3比较 ,发现有1比2小, 则用中间变量记录1和下标1, 然后再用存在中间变量的最小值和4比较, 不符合,再和3比较, 不符合,最后得到1为最小值,所以2和1就行位置的交换
1, 2, 4, 3
②2和 4 ,3 进行比较 规则和①一样
1, 2, 4, 3
③4和3进行比较 规则和①一样
1, 2, 3 ,4
通过示例演示发现 n个数 比较n-1次
三,代码
Ⅰ,按照思想进行代码的实现
public static void selectSort(int []arr){ /** *示例:2 ,1, 4, 3 * ①先假设第一个数最小的(2),然后拿这个数去和后面的n个数依次进行比较, * ②如果发现有比最小值还小的数 则通过中间变量记录下下标和值, * ③然后继续拿这个最小值往后进行比较,如果又发现比最小值还小的值 就执行第②步,直到比完最后一个元素 * ④最后把存在中间变量的最小值和最小值的下标 和假设的那个最小值进行交换 * 示例过程: * 2, 1, 4, 3 * ①2和 1, 4 ,3比较 ,发现有1比2小, 则用中间变量记录1和下标1, 然后再用存在中间变量的最小值和4比较, 不符合,再和3比较, 不符合,最后得到1为最小值,所以2和1就行位置的交换 * 1, 2, 4, 3 * ②2和 4 ,3 进行比较 规则和①一样 * 1, 2, 4, 3 * ③4和3进行比较 规则和①一样 * 1, 2, 3 ,4 * 通过示例演示发现 n个数 比较n-1次 */ for(int i=0;i<arr.length-1;i++){ // 声明中间值用进行比较和存最小值 int minNumber=arr[i]; int minIndex=i; for(int j=i+1;j<arr.length;j++){ if(minNumber>arr[j]){ minNumber=arr[j]; minIndex=j; } } arr[minIndex]=arr[i]; arr[i]=minNumber; } }
Ⅱ,通过观察示例交换的规律发现 当假设成立的时候 就不用进行数据的交换了,因此当中间变量的下标值和假设的值相等时,就不用就行数据的交互
public static void selectSort2(int []arr){ for(int i=0;i<arr.length-1;i++){ int minNumber=arr[i]; int minIndex=i; for(int j=i+1;j<arr.length;j++){ if(minNumber>arr[j]){ minNumber=arr[j]; minIndex=j; } } if(minIndex!=i){ arr[minIndex]=arr[i]; arr[i]=minNumber; } } }
标签:pre 相等 位置 交互 最小值 代码 code mini 12px
原文地址:https://www.cnblogs.com/zhijm/p/13019912.html