java:用直接选择法对数组进行排序

关键词

//创建直接选择排序对象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();					//换行
	}
}

运行结果

在这里插入图片描述

附加说明

以上内容以笔者的思维、理解来写,且能力有限,不足、错误之处敬请指出,万分感谢。

发布了66 篇原创文章 · 获赞 11 · 访问量 1671

猜你喜欢

转载自blog.csdn.net/qq_44925904/article/details/103411817