1.
![](https://img-blog.csdnimg.cn/img_convert/510ba7f3c65915f73083c322f6942ffb.gif)
/**
* 功能描述 : 选择排序
* 选择 未排序区间最小的值扔到 已排序区间左边(左一,左二等)
*
* 思想:选择排序也是划分为已排序区间和未排序区间
* 每次从未排序区间中找到最小的元素,将其放到已排序区间的末尾
*
* 描述:
* 在一个长度为 N 的无序数组中,第一次遍历 n-1 个数找到最小的和第一个数交换。
* 第二次从下一个数开始遍历 n-2个数,找到最小的数和第二个数交换。
* 重复以上操作直到第 n-1 次遍历最小的数和第 n-1 个数交换,排序完成。
*
*
* @author guoyiguang
* @date 2023/1/3
* @param
* @return
*/
public void selectionSort(){
// int[] arr = {44, 3, 38,5};
// 第一次 for 循环: 44,3,38,5 ---> 找出 3 放到已排区间里 (已排序:3 ;未排 ,44,38,5 )
// 第二次 for 循环: 3, 44,38,5 ---> 找出 5 放到已排区间里 5 (已排序:3,5 ;未排 44,38 )
// 第三次 for 循环: 3,5 38,44, ---> 找出 38 放到已排区间里 (已排序:3,5,38, ;未排 44 ) 需要循环 n-1次
int[] arr = {6, 5, 4,3,2,1};
//已排序区间
for(int m = 0 ;m <=arr.length-1;m++){
// m 的位置存放 未排序区间的最小值,所以 遍历 数组获取 未排序区间的最小值
int min = arr[m];
int n1=m ;
for(int n = m; n <=arr.length-1 ;n++ ){
if(min > arr[n]){
min = arr[n];
n1 = n;
}
}
// {5,6}
// 互换位置
// 之前的A位置
arr[n1] = arr[m];
// 已排序区间 插入最大值A
arr[m] = min;
}
System.out.println(arr) ;
}