【基本原理】
对于给定的一组数据,经过第一轮比较后得到最小的数据,然后将该数据与第一个数据的位置进行交换;
然后对不包括第一个数据以外的其它数据进行第二轮比较,得到最小的数据并与第二个数据进行位置交换;
重复该过程,直到进行比较的数据只有一个时为止。
【举例】
待排序数组
【38,65,97,76,13,27,49】
排序过程
第一趟:【13,65,97,76,38,27,49】
第二趟:【13,27,97,76,38,65,49】
第三趟:【13,27,38,76,97,65,49】
第四趟:【13,27,38,49,97,65,76】
第五趟:【13,27,38,49,65,97,76】
第六趟:【13,27,38,49,65,76,97】
最后结果:【13,27,38,49,65,76,97】
【代码实现】
package com.sort; public class TestSelectSort { public static int[] selectSort(int[] a){ int length=a.length; //先得到数组的长度 int i,j,n,tmp,flag; for(i=0;i<length;i++){ tmp=a[i]; //tmp为每次循环的第一个位置 flag=i; for(j=i+1;j<length;j++){ if(tmp>a[j]){ tmp=a[j]; //这一步不要忘记了,因为tmp不一定是最小的,必须用用循环过的最小的和当前的数据比较 flag=j; //如果发现比tmp小的数据,将flag标记为当前位置,循环结束,flag标志的是最小数字的下标 } } if(flag!=i){ //如果flag已经不再是刚开始第一个位置的i,那么将两者的数据调换位置 n=a[i]; a[i]=a[flag]; a[flag]=n; } } return a; } public static void main(String[] args){ int a[]={2,9,0,8,7,1,5,4,3,6}; a=selectSort(a); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } }
时间: 2024-10-14 04:45:34