Demo05.java 1.9 KB

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