算法分析:
-
直接选择排序的基本思想是将指定排序位置与其他数组元素对比,如果满足条件就交换,区别BubbleSort,不是交换相邻元素,而是把满足条件的元素与指定位置的元素交换。好比一个学生,从包含数字1~10的乱序数字堆中分别选择合适的数字,组成一个排序,他从中选出1,排在第一位,然后选出2(此时堆里已经没有1了),以此类推,直到找到数字9,放到8后面,最后剩下10,就不要选择了,同时排序结束。与BubbleSort相比,SelectSort交换次数要少,速度更快。
-
代码:
public class Selectsort {
public static void main(String[] args){
//调用scanner类,定义一个扫描对象
Scanner scanner = new Scanner(System.in);//打开输入流
//定义一个数组
int array[] = new int[6];
//调用scanner对象的nextInt()对象,将输入的数字存入数组
for (int i =0;i<array.length;i++){
array[i] = scanner.nextInt();
}
scanner.close();//关闭输入流
//创建选择排序类的对象
Selectsort sorter = new Selectsort();
//调用排序对象的方法将数组排序
sorter.sort(array);
}
//选择排序
public void sort(int[] array){
int index=0;
for(int i=1;i<array.length;i++){
for (int j=1;j<array.length-i;j++){
if(array[j]>array[index]){
index = j;
}
}
//交换在位置array.length-i和index(最大值)上的两个数
int temp = array[array.length-i];// 把第一个元素保存到临时变量中
array[array.length-i] = array[index];//把第二个元素保存到第一个元素单元中
array[index] = temp;//把临时变量(第一个元素)保存到第二个元素单元中
}
showArray(array);//输出直接选择排序后的数组元素
}
//显示数组中的元素
public void showArray(int[] arr){
for(int i:arr){//遍历数组
System.out.println(">"+i);//输出每个数组元素值
}
System.out.println();
}
}
- 执行结果:
关于scanner类的使用:
https://blog.youkuaiyun.com/joseph_cherry/article/details/59486859 (感谢原作者)