行业资讯 2025年08月6日
0 收藏 0 点赞 368 浏览 1572 个字
摘要 :

文章目录 一、前言 二、内容 2.1 思路 2.2 代码实现步骤 2.3 代码 三、总结 一、前言 本文主要介绍Java实现选择排序经典代码和具体的算法思路。 选择式排序也属于内部……




一、前言

本文主要介绍Java实现选择排序经典代码和具体的算法思路。

选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。

二、内容

2.1 思路

选择排序的思路就是将数组视为两部分:已排序区间和未排序区间。然后,在未排序区间中找到最小元素,放到已排序区间的起始位置,再从剩余未排序区间元素中继续寻找最小元素,再放到已排序区间的末尾。以此类推,直到所有元素均排序完毕。

简单地说,选择排序就是遍历数组,找到最小元素,存放到数组的起始位置。然后再从剩下的元素中继续寻找最小元素,再放到数组的第二个位置,以此类推。

选择排序的基本思想步骤如下:

第一次:从arr[0]~arr[n-1]中选取最小值,与arr[0]进行交换;

第二次:从arr[1]~arr[n-1]中选取最小值,与arr[1]进行交换;

第三次:从arr[2]~arr[n-1]中选取最小值,与arr[2]进行交换;

第 i 次:从arr[i]~arr[i-1]中选取最小值,与arr[i]进行交换;

总共通过n-1次,可以得到从小到大的有序序列。

以序列:{8, 3, 2, 1, 7, 4, 6, 5} 为例!分步骤图解如下:Java实现选择排序经典代码和算法思路

2.2 代码实现步骤

假设待排序数组 arr 的元素个数为 n

选择排序的步骤如下:

  • 初始时,将整个数组视为未排序区间。同时已排序区间为空,已排序区间末尾位置的下标 i 指向 0;
  • 接着,在未排序区间中找到最小的元素,我们用 minIndex 来记录当前未排序区间中最小元素的下标。
  • 将找到的最小元素添加到已排序区间的末尾位置,即 swap(arr, i, minIndex)
  • 将已排序区间的末尾扩展一个元素,也就是 i++,此时继续去未排序区间中寻找当前最小值元素,再将其添加到已排序区间的末尾位置,以此类推。
  • 直到未排序区间变为空,已排序区间变成整个数组。

具体的,我们用两层for循环来模拟:

  • 外层循环中,循环变量 i0 遍历到 n-2,表示已排序区间的末尾位置的下标
  • 内层循环中,循环变量 ji+1 遍历到 n-1,用于遍历待排序部分的元素,找到最小值。
  • 当我们在内层循环中找到当前待排序部分的最小值元素后,将其赋给 arr[i],表示将最小值元素添加到已排好序的序列的末尾。

逐渐的,已排好序的序列末尾会是一个递增的趋势。

2.3 代码

首先说明,在代码中会使用到自定义的 swap(),该方法将数组中指定下标的两个数据元素进行交换操作。定义如下:

public static void swap(int[] arr, int i, int j) {
    int tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}

下面是选择排序算法的Java代码经典实现方式。

public static void selectionSort(int[] arr) {
    
    // 数组的长度为 n
    int n = arr.length;
    
    // 处理特殊情况
    if(arr == null || n < 2) {
        return;
    }
    
    // i 指向当前已排序区间的末尾位置
    for(int i = 0; i <= n-2; i++) {
        
        // 在未排序区间中寻找最小元素的下标,并记录到 minIndex 中
        int minIndex = i;
        
        // j 用于遍历未排序区间
        for(int j = i+1; j <= n-1; j++) {
            
            // 寻找最小值元素的下标
            minIndex = arr[j] < arr[minIndex] ? j : minIndex;
            
        }
        
        // 在每轮遍历完未排序区间后,
        // minIndex 指向的就是未排序区间中最小元素的下标,
        // 将其指向的数据元素放到已排好序的序列的末尾
        // 也就是将 arr[i] 与 arr[minIndex] 进行交换
        swap(arr, i, minIndex); 
    }
}

三、总结

以上就是以上就是Java实现选择排序经典代码和算法思路的全部内容。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9714.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号