vlambda博客
学习文章列表

Java基础-数组-排序-简单选择排序

Java基础-数组-排序-简单选择排序

排序目标:

将已知整数数组按从小到大的顺序进行排列;

 // 排序前
 {4, 2, 1, 3, 5};
 
 // 排序后
 {1, 2, 3, 4, 5};


实现思路:

在已知整数数组中,从下标为0的元素开始,依次与后面的元素进行对比;若当前元素的值大于所对比的元素的值,则交换两个元素的值;然后继续对比,一轮对比完成后可以将最小的值放在第一位;再从下标为1的元素继续对比,如此循环最终可将数组的元素按从小到大的顺序排列,实现数组排序;

示例代码:

 /**
  * description 简单选择排序
  * @author Makavelli
  * @date 2022/2/20 23:02
  * @version 1.0.0
  */
 public class SelectSort {
     public static void selectSort(int[] num) {
         System.out.println("开始排序");
         int arrayLength = num.length;
         for (int i = 0; i < arrayLength - 1; i++) {
             for (int j = i + 1; j < arrayLength; j++) {
                 /**
                  * 交换 num[i] 和 num[j]
                  */
                 if (num[i] - num[j] > 0) {
                     int temp = num[i];
                     num[i] = num[j];
                     num[j] = temp;
                }
                 System.out.println("第"+j+"次比对后"+java.util.Arrays.toString(num));
            }
             System.out.println("第"+(i+1)+"轮排序"+java.util.Arrays.toString(num));
        }
    }
 
     public static void main(String[] args) {
         int[] num = {4, 2, 1, 3, 5};
         System.out.println("排序之前:\n" + java.util.Arrays.toString(num));
         selectSort(num);
         System.out.println("排序之后:\n" + java.util.Arrays.toString(num));
    }
 }


程序输出日志:

 排序之前:
 [4, 2, 1, 3, 5]
 开始排序
 第1次比对后[2, 4, 1, 3, 5]
 第2次比对后[1, 4, 2, 3, 5]
 第3次比对后[1, 4, 2, 3, 5]
 第4次比对后[1, 4, 2, 3, 5]
 第1轮排序[1, 4, 2, 3, 5]
 第2次比对后[1, 2, 4, 3, 5]
 第3次比对后[1, 2, 4, 3, 5]
 第4次比对后[1, 2, 4, 3, 5]
 第2轮排序[1, 2, 4, 3, 5]
 第3次比对后[1, 2, 3, 4, 5]
 第4次比对后[1, 2, 3, 4, 5]
 第3轮排序[1, 2, 3, 4, 5]
 第4次比对后[1, 2, 3, 4, 5]
 第4轮排序[1, 2, 3, 4, 5]
 排序之后:
 [1, 2, 3, 4, 5]

步骤说明

  • 声明数组int[] num = {4, 2, 1, 3, 5};

  • 第 1 轮第 1 次比对;i = 0 ,j = 1 num[i] = 4 ,num[j] = 2; 4 > 2,故交换二者的值,交换后的数组为{2, 4, 1, 3, 5};

  • 第 1 轮第 2 次比对;i = 0 ,j = 2 num[i] = 2 ,num[j] = 1; 2 > 1,故交换二者的值,交换后的数组为{1, 4, 2, 3, 5};

  • 第 1 轮第 3 次比对;i = 0 ,j = 3 num[i] = 1 ,num[j] = 3 1 < 3,故不交换,此时数组为{1, 4, 2, 3, 5};

  • 第 1 轮第 4 次比对;i = 0 ,j = 4 num[i] = 1 ,num[j] = 5 1 < 5,故不交换,此时数组为{1, 4, 2, 3, 5};

综上,第一轮排序后的数组是:{1, 4, 2, 3, 5}

第一轮排序过程示意图如下:


重复如上步骤,最终排序后的数组是:[1, 2, 3, 4, 5]


感谢阅读,如果对您有帮助,很希望能收到您一个大大的赞!

关注了解更多!