选择排序(学习笔记)

选择排序

选择排序的基本思想是冒泡排序,记录当前位置i和最小值k的位置,使用一个变量j往后寻找。

每一轮找到最小值后与第一个元素进行交换,以此类推。

不使用辅助变量交换两个元素的值方法

java 复制代码
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 <length ; j++) {
                if (arr[j]<arr[k]){
                    k = j;
                }
            }
            int temp = arr[i];
            arr[i] = arr[k];
            arr[k] = temp;
        }
    }*/
}

核心代码示意图:

相关推荐
2301_7644413318 小时前
Aella Science Dataset Explorer 部署教程笔记
笔记·python·全文检索
Bathwind-w18 小时前
FOC开发工具学习
学习
Coder_Boy_19 小时前
DDD从0到企业级:迭代式学习 (共17章)之 四
java·人工智能·驱动开发·学习
派大鑫wink19 小时前
【Java 学习日记】开篇:以日记为舟,渡 Java 进阶之海
java·笔记·程序人生·学习方法
deng-c-f19 小时前
Linux C/C++ 学习日记(49):线程池
c++·学习·线程池
HyperAI超神经20 小时前
【vLLM 学习】Prithvi Geospatial Mae
人工智能·python·深度学习·学习·大语言模型·gpu·vllm
永远都不秃头的程序员(互关)20 小时前
大模型Agent落地实战:从核心原理到工业级任务规划器开发
笔记
TL滕21 小时前
从0开始学算法——第十八天(分治算法)
笔记·学习·算法
算法与双吉汉堡21 小时前
【短链接项目笔记】Day2 用户注册
java·redis·笔记·后端·spring
思成不止于此1 天前
【MySQL 零基础入门】MySQL 约束精讲(一):基础约束篇
数据库·笔记·sql·学习·mysql