• 动画演示选择排序(Selection Sort)


    1、排序规则

    1.1 一句话总结选择排序

    数组中第一个数字开始,数组中每个数字都要和后面所有数字比一次大小,每每次循环遍历当前最小值,放在当前循环范围内的最小位置。当完成第 N - 1 次循环之后,排序完成。N = 数组长度 - 1

    1.2 排序方法和规则

    假设对数组 arr = [1, 4, 7, 3, 5, 8, 9, 2, 10, 6]排序,数组长度为 arr.length,i 为数组下标。

    1. 假设我们用红色来标记最小值,
    2. 假设数组中的第 i = 0(索引下标为 0)个元素就是整个数组的最小值,我们暂时先把它标记为红色。
    3. 为了验证第 i = 0(索引下标为 0)个元素是最小值,他需要和数组中每个元素进行比较。
    4. 在遍历过程中,如过发现更小值,在遍历完整个数组之前,则暂时先标记新的最小值为红色。
    5. 继续遍历,重复上一步,直至循环结束,当前红色位置的数字就是最小值。
    6. 把最小值和当前第一个数字位置调换,因为红色位置的数字更小。‘
    7. 此时我们完成了一轮循环,整个数组中最小的数字已经找到,我们给它标记为橙色。
    8. 下面我们开始第二轮循环,找数组中第二小的数字,因为第一小的数字已经找到,所以我们第二轮循环从第 i = 1(索引下标为 1)个数字开始,方法为在除去第一个数字剩下的数字中重复 1-7 步。
    9. 反复如此,每次循环,可以确定下标在 i 之后的所有元素的最小值,即当前循环的最小值。
      10.当完成了 arr.llength -1 次循环遍历之后,选择排序完成。

    2、动画演示

    在这里插入图片描述

    • 橙色:每轮循环最终的最小值
    • 红色:每轮循环过程中的临时最小值,当绿色滚动发现更小值的时候,更新临时最小值
    • 蓝色:尚未排序的元素

    3、Java 实现

    public class 选择排序 {
    
        public static void main(String[] args) {
            int[] arr = {1, 4, 7, 3, 5, 8, 9, 2, 10, 6};
            // 排序前
            printArr(arr);
            // 排序
            selectSort(arr);
            // 排序后
            printArr(arr);
        }
    
        private static void printArr(int[] arr) {
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + " ");
            }
            System.out.println();
        }
    
        public static void selectSort(int[] arr) {
            // 0~ N-1
            // 1~ N-1
            // N-2 ~ N-1
            for (int i = 0; i < arr.length; i++) {
                int minValIndex = i;
                for (int j = i + 1; j < arr.length; j++) {
                    minValIndex = arr[j] < arr[minValIndex] ? j : minValIndex;
                }
                if (minValIndex != i) {
                    swap(arr, i, minValIndex);
                }
            }
        }
    
        private static void swap(int[] arr, int i, int j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
  • 相关阅读:
    【微信小程序】自定义组件(三)
    弘辽科技:拼多多改销量会降权吗?什么情况下会降权?
    CSP-J初赛复习大题整理笔记
    XSS绕过安全狗WAF
    C++-哈希Hash
    深度学习之神经网络是如何自行学习的?
    Android 广播的注册和收发原理
    学习STM32(2)--STM32单片机GPIO应用
    web网页设计期末课程大作业——汉中印象旅游景点介绍网页设计与实现19页面HTML+CSS+JavaScript
    BUUCTF [BJDCTF2020]藏藏藏 1
  • 原文地址:https://blog.csdn.net/wlei0618/article/details/128090638