java选择法排序
选择法排序同冒泡法一样都较容易,但其原理稍有不同,冒泡法主要是通过相邻元素的大小比较而排序,而我们今天学习的选择法排序是确定一个元素之后和其他所有元素进行比较。下面我们简单看下一吧!
原理:令一个元素的下标值为min(通常是第一个元素),然后把这个元素和其他所有元素依次进行比较,如果有元素比下标为min的值小,就使min等于较小的值的下标,第一轮下来之后,min对应的下标值一定是数组中的最小值,但min对应的下标值也可能就不是第一个元素的下标了,然后使下标为min的元素和第一个元素进行交换,然后第一个位置就是最小值了。之后再令第二个元素的下标为min,重复上述过程,结果第二个位置是次小值。然后再进行上述过程,可得到最终想要的排序结果。
我想要对{9,4,7,2,8,6}进行升序排序
可以看一个简单的实例:
-
第一轮{9,4,7,2,8,6}
令min=0,’ 0’为第一个元素的下标,之后拿9和第二个元素4比较发现4比9小,此时令min=1,min成了第二个更小元素的下标,之后拿4和第三个元素7比较发现4比7小,所以不进行min的值的改变,之后重复上述过程,最终min的值为3,也就是元素值2,接下来使元素值2和第一个元素进行交换,这样一来第一个位置就成了这个数组的最小值,数组变为{2,4,7,9,8,6}。接下来的排序的时候,第一个元素就固定住了不用移动了。 -
第二轮{2,4,7,9,8,6}
令min=1, '1’为第二个元素的下标,之后拿4和第二个元素7比较发现4比7小,符合条件,继续和下一个元素比较,最终min下标为1,也就是元素值为4,所以不进行交换
。。。。。。。。。。。
。。。。。。。。。。。
。。。。。。。。。。。此处省略后面几轮的排序
。。。。。。。。。。。
最终经过五轮的排序,得到升序结果{2,4,6,7,8,9},可以发现每一轮排序开始,min下标值都会向下进行一个,这意味着每一轮的排序中进行的次数是不一样的,大家可以思考一下有什么规律
下面附上代码,大家可以参考一下,从而加深理解
package suanfa;
public class xuanze {
// 选择法排序
public static void main(String[] args) {
int arry[]= {20,30,4,95,62,66,18};
int i,j;
// 升序排列
for(i=0;i<arry.length-1;i++) // 外层循环控制排序次数为N-1次
{
int min=i; //令第一个数为最小值
for(j=i+1;j<arry.length;j++) //内层循环为控制每一项与min比较次数
{
if(arry[min]>arry[j])
{
min=j;
}
}
if(min!=i) //判断在一次循环中是否有比Min更小的值
{
int temp=arry[i];
arry[i]=arry[min];
arry[min]=temp;
}
}
System.out.print("排序结果为");
for(int z=0;z<arry.length;z++)
{
System.out.print(" "+arry[z]);
}
}
}