| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import java.util.Arrays;
- /**
- * @author WanJl
- * @version 1.0
- * @title Demo05
- * @description 数组排序-选择排序
- * @create 2026/7/16
- */
- public class Demo05 {
- /*
- 选择排序:
- 选择排序的思路要比冒泡排序更聪明一点,冒泡排序是不断的交换相邻的元素,而选择排序,是每轮只做一次交换。
- 选择的思路是 每一轮从剩余未排序的元素中找出最小的元素,直接把它放到未排序部分的第1位。
- 核心思路:每一轮从未排序区间选出最小值,与未排序区间的第1个元素进行交换。
- */
- public static void main(String[] args) {
- /*
- 选择排序:每一轮从未排序区间选出最小值,放到已排序区间的末尾
- */
- int[] arr={1,456,782,5,8,4,598,1,46,68,465,74};
- //外层循环:i 既是已排序区间的末尾边界,也是当前要确定的位置
- for (int i = 0; i < arr.length-1; i++) {
- //假设当前未排序区间的第1个元素就是最小的
- int minIndex=i; //假设i就是最小的元素的索引值
- //内层循环:在未排序区间[i+1,arr.length-1] 找到真正的最小值
- for (int j = i+1; j <arr.length; j++) {
- //判断谁才是最小值
- if (arr[j]<arr[minIndex]){
- minIndex=j; //就更新最小元素的索引值
- }
- } //当内层循环跑完一轮,就得到了数组的最小元素索引值
- // 如果得到的最小元素索引值 minIndex 和 当前的 i 不想等,
- //那就交换位置
- if (minIndex!=i){
- arr[minIndex]=arr[minIndex]+arr[i];
- arr[i]=arr[minIndex]-arr[i];
- arr[minIndex]=arr[minIndex]-arr[i];
- }
- System.out.println("第"+(i+1)+"轮选择后:"+ Arrays.toString(arr));
- }
- }
- }
|