关键词
//创建直接选择排序对象selectSorter0
Demo selectSorter0=new Demo();
//调用排序(sort)的方法对数组array0对象(selecSorter0)进行排列
selectSorter0.sort(array0);
//排序的方式
public void sort(int[] array0){}
showArray0(array0);
//显示数组内容
public void showArray0(int[] array0){}
相关说明
直接选择排序法,先设一个index(参数,往数组位置方面考虑)为0,和数组中元素依次比较,当index(参数)比要比较的数小时就代替那个比较的数,当一轮比较到最后时index就是最大的那个数了,然后把index(此时是最大的数)和最后的数(最后的数为array0.length-i)替换,最后最大的数就换到最后面,原先最后面的数则换到index(最大时)的位置。当一轮完毕时,已确定最大的数在最后面,这时只用考虑倒数第二的数,要考虑的数组长度由n变成n-1。上面说的i初始值为1,比如说长度为4,但对于数组排序来说是第3个,其中差的1,就是数组长度和确定位置时的变化。
和冒泡排序的不同
冒泡排序法是通过两个数不断比较替换把最大(最小时也行,这里以最大时为例)的一次次地替换到最后面,一轮一轮下来就完成了从小到大的排序。而直接选择排序法就是先两两比较确定最大的数的位置A,然后通过替换法把这个最大数换到最后面的位置B去,但数组可能还要进行下一轮的替换,原先B位置的数也放到A位置去。
源码
/*所想:
直接选择排序
先通过循环来确定最大的数,然后再进行数值位置的变化。
select(挑选)index(索引)temp(临时)param(参数)
*/
class Demo{
public static void main(String[] args){
//创建一组数组,乱序
int[] array0={3,89,15,5,11,17,28,116};
System.out.println("原数组为:3,89,15,5,11,17,28,116");
//创建直接选择排序对象selectSorter0
Demo selectSorter0=new Demo();
//调用排序(sort)的方法对数组array0对象(selecSorter0)进行排列
selectSorter0.sort(array0);
}
/**
直接选择排序
@param array0
排序的方式
*/
public void sort(int[] array0){
int index;
for(int i=1;i<array0.length;i++){ //这里过一个数组就i加1,排序法排序完一次就不用考虑最后一个,而考虑倒数第二个
index=0;
for(int j=1;j<=array0.length-i;j++){ //array0.length-i这个表示对比的最后一个数,随i的增加而变小,因为排完一轮后的那个数不用考虑了
if(array0[j]>array0[index]){ //一开始的index和数组比,若index小就代替比它大的那个数,到最后index就是最大的那个数了
index=j;
}
}
//经过上一个循环最大的数已知是index,
//现在把最大的数index和数组最后一个数(array0.length-i)交换
int temp=array0[array0.length-i]; //要想把最大的数放到最后面,先创一个临时变量,把最后一个数值放到临时变量(temp)中
array0[array0.length-i]=array0[index]; //把最大的数放到腾空的最后一个数值的位置2019/12/5
array0[index]=temp; //把原先最后的数放到腾空的最大的数去,就此第一轮比较完成
}
showArray0(array0);
}
/**
输出排列好的数组
@param array0
显示数组
*/
public void showArray0(int[] array0){
System.out.print("直接选择排序法排列后为:");
for(int i:array0){ //对数组
System.out.print(">"+i); //一个一个输出每个元素
}
System.out.println(); //换行
}
}
运行结果
附加说明
以上内容以笔者的思维、理解来写,且能力有限,不足、错误之处敬请指出,万分感谢。