一.原理
1.每一次遍历的过程中,都假定第一个索引处的元素是最小值min,并和其他索引处的值依次进行比较,如果当前索引处 的值大于其他某个索他引处的值,则假定其某个索引出的值为最小值min,最后可以找到最小值所在的索引
2.最后交换第一个索引处和最小值所在的索引处的值
(寻找最小;假定第一个为设定最小值min开始,与后面依次比较,谁小谁的索引就是min,最后将min放到第一,比较个数越来越少)
由于原理较简单,直接上代码。
二.java代码实现
public class selection { public static void sort(int[] a){ for (int i=0;ia[j]){ //比较假定最小数和后面一位 min=j; } } exchange(a,i,min); //交换默认第一个数和 这一轮最小的数 }} private static void exchange(int[]a,int i,int min){ //不要忘了参数的声明类型 int t=a[i]; a[i]=a[min]; a[min]=t;} public static void main(String[] args) { int[] a={4,6,8,7,9,2,10,1}; selection.sort(a); System.out.println(Arrays.toString(a)); } }
运行结果:[1, 2, 4, 6, 7, 8, 9, 10]
需要注意的地方:
- 外层循环可以视为每一轮假定最小值可选的索引范围。其假定的最小值最大也就取到倒数第二个,不能取到最后一个,所以i < a.length-1
- 需要初始化一个minIndex来记录假定最小值的索引,初始默认为第一个数,所以minIndex=i。
- 内层循环比较的是假定最小值和后面一个数,即a[minIndex]和a[j],所以j=i+1。
- j的范围可以取到最后一位,所以j
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)