• 选择排序(学习笔记)


    选择排序

    选择排序的基本思想是冒泡排序,记录当前位置i和最小值k的位置,使用一个变量j往后寻找。
    每一轮找到最小值后与第一个元素进行交换,以此类推。
    在这里插入图片描述
    不使用辅助变量交换两个元素的值方法
    在这里插入图片描述

    package com.company.sort;
    
    import java.util.Random;
    
    //选择排序的基本思想是冒泡排序,记录当前位置i和最小值k的位置,使用一个变量j往后寻找。
    //  每一轮找到最小值后与第一个元素进行交换,以此类推。
    public class SelectSort {
        public static final int ARRLENGTH = 10;
        public static void main(String[] args) {
            //创建数组
            int[] unSortArray = createArray(ARRLENGTH);
            //打印初始化未排序数组
            printArray(unSortArray);
            //选择排序
            selectSort(unSortArray);
            //打印选择排序后的数组
            printArray(unSortArray);
        }
        //创建数组方法(数组中的元素随机生成)
        public static int[] createArray(int length){
            int[] arr =new int[length];
            Random random = new Random();
            for (int i = 0; i < arr.length; i++) {
                arr[i] = random.nextInt(20);//[0,20)
            }
            return arr;
        }
        //打印数组方法
        public static void printArray(int[] arr){
            for (int i=0;i<arr.length;i++) {
                if (i==0){
                    if (arr.length==1){
                        System.out.println("["+arr[0]+"]");
                    }else{
                        System.out.print("["+arr[i]+",");
                    }
                }else if(i==arr.length-1){
                    System.out.println(arr[i]+"]");
                }else {
                    System.out.print(arr[i]+",");
                }
    
            }
            System.out.println("--------------------------------------------------------");
        }
        //选择排序法
        public static void selectSort(int[] arr){
            for (int i = 0; i < arr.length; i++) {
                int k=i;
                for (int j = i+1; j <arr.length ; j++) {
                    if (arr[k]>arr[j]){
                        k = j;
                    }
                }
               //异或法交换,加减法交换在这里不适用,因为i与k有可能指向同一元素,会导致出现很多0,最好还是用临时变量temp——Debug看一下排序过程就知道了。
                /*arr[i] = arr[i]+arr[k];
                arr[k] = arr[i]-arr[k];
                arr[i] = arr[i]-arr[k];*/
    
                /*arr[i] = arr[i]^arr[k];
                arr[k] = arr[i]^arr[k];
                arr[i] = arr[i]^arr[k];*/
                -------------------------------
                a= a^b;
                b =a^b
                a =a^b;
                */
                
                int temp = arr[i];
                arr[i] = arr[k];
                arr[k] = temp;
            }
        }
     /*   public static void selectSort(int[] arr,int length){
            for (int i = 0; i < length; i++) {
                int k = i;
                for (int j = i+1; j 
    }
    
    
    • 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
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88

    核心代码示意图:
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    抖音矩阵系统源代码开发部署--SaaS开源技术开发文档
    Perl中常见符号与操作
    springboot实现同时批量新增和批量修改数据
    [激光原理与应用-30]:典型激光器 -2- 气体激光器 (连续激光器)
    十年测试老鸟聊聊移动端兼容性测试
    一文2600字手把手教你编写性能测试用例
    Python eval 函数动态地计算数学表达式
    matlab画自定义函数
    Nat. Methods | 哈佛李恒组开发三代HiFi宏基因组组装软件--hifiasm-meta
    Vue3+tsx开发语法详解
  • 原文地址:https://blog.csdn.net/weixin_48935611/article/details/133840097