基本概念
所谓简单选择排序,就是对数组进行n-1次遍历,每次遍历都选择出最大的或最小的将其往前排
举个例子:有一个数组 4,5,3,1,2 将它进行从小到大排序
第一次遍历:找到数组中的最小值 1 ,将它移动到最前面(即和 4 进行交换),此时数组变为: 1,5,3,4,2
第二次遍历:数字 1 已经到了它所应该在的位置,就不用再管它,可以认为将其从数组中“剔除”,遍历从第二个数开始,找出此时最小的数 2 ,将他移动到数组的最前面(即和5进行交换),此时数组变为: 1,2,3,4,5
第三次遍历:照样将数字2从数组中“剔除”,遍历从第三个数开始,找出最小的数字 3,将其移动到数组的最前面(即和自身进行交换,相当于没交换),此时数组还是: 1,2,3,4,5
第四次遍历:照样将数字3从数组中“剔除”,遍历从第四个数开始,找出最小的数字4,将其移动到数组的最前面(即和自身进行交换,相当于没交换),此时数组还是: 1,2,3,4,5
最后得到的就是排好序的数组,无需进行第五次遍历,因为前面四个数排好后,剩下的最后一个位置,自然就是第五个数的位置
算法设计思路
总共需要两层循环,第一层循环控制遍历的次数,从上面的例子可以看出,遍历的次数是数组的长度减一;第二层循环是遍历寻找最小值的过程,从上面的例子可以看出,每次遍历完都要“剔除”一个数,并且这个数在数组最前面,因此,第n次遍历,会从下标n-1开始
JAVA实现
package com.sort; import java.util.Arrays; public class SearchSort { public static void main(String[] aaa) { int[] a=new int[]{5,2,4,3,1,8,6,7}; sort(a); System.out.print(Arrays.toString(a)); } public static void sort(int[] a) { //第一层循环,控制遍历次数 for(int i=0;i<a.length-1;i++) { //min记录最小的数 int min=a[i]; //minNum记录最小的数的下标,用于下面的交换 int minNum=i; //第二层循环,遍历比较出最小值 for(int j=i+1;j<a.length;j++) { if(min>a[j]) { min=a[j]; minNum=j; } } //将最小值移动到最前面 a[minNum]=a[i]; a[i]=min; } } }