八大排序——简单选择排序

目录

1.1基本操作:

1.2动态图:

1.3代码:

代码解释

1. main 方法

2. selectSort 方法

示例运行过程

初始数组

每轮排序后的数组

最终排序结果

代码总结


1.1基本操作:

选择排序(select sorting)也是一种简单的排序方法。

它的基本思想是:第一次从arr[0到]arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1]到arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2]到arr[n-1]中选取最小值,与arr[2]交换,…,第i次从arr[i-1]arr[n-1]中选取最小值,与arr[i-1]交换,…, 第n-1次从arr[n-2]~arr[n-1]中选取最小值,与arr[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

1.2动态图:

1.3代码:

public class Insert {public static void main(String[] args) {int[] arr = {8,65,41,28,6,1,4,5,32,9,10};System.out.println("排序前");System.out.println(Arrays.toString(arr));selectSort(arr);}public static void selectSort(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {//寻找最小值,将当前的作为最小值来看待int minIndex = i;int min = arr[i];for (int j = i + 1; j < arr.length; j++) {// 当前值的下一个值和当前值判断大小,如果先一个值小,那么就进行交换 ,// 当然要记录一下当前值的 下标 ,目的是为了当前值和第一个值进行交换if (min > arr[j]) {min = arr[j];minIndex = j;}}//进行交换arr[minIndex] = arr[i];arr[i] = min;System.out.println("第" + (i + 1) + "轮后");System.out.println(Arrays.toString(arr));}}
}

代码解释

1. main 方法

public static void main(String[] args) {
    int[] arr = {8, 65, 41, 28, 6, 1, 4, 5, 32, 9, 10};
    System.out.println("排序前");
    System.out.println(Arrays.toString(arr));
    selectSort(arr);
}

  • 功能:程序的入口。

  • 逻辑

    • 定义了一个未排序的整数数组 arr

    • 打印排序前的数组。

    • 调用 selectSort 方法对数组进行排序。

2. selectSort 方法

public static void selectSort(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
        // 寻找最小值,将当前的作为最小值来看待
        int minIndex = i;
        int min = arr[i];
        for (int j = i + 1; j < arr.length; j++) {
            // 当前值的下一个值和当前值判断大小,如果下一个值小,那么就更新最小值和最小值的下标
            if (min > arr[j]) {
                min = arr[j];
                minIndex = j;
            }
        }
        // 进行交换
        arr[minIndex] = arr[i];
        arr[i] = min;
        System.out.println("第" + (i + 1) + "轮后");
        System.out.println(Arrays.toString(arr));
    }
}

  • 功能:实现选择排序算法。

  • 逻辑

    1. 外层循环

      • 遍历数组,从第一个元素到倒数第二个元素(i 从 0 到 arr.length - 2)。

      • 每次循环的目的是找到未排序部分的最小值,并将其放到已排序部分的末尾。

    2. 初始化最小值和最小值的下标

      • minIndex 记录当前最小值的下标,初始值为 i

      • min 记录当前最小值,初始值为 arr[i]

    3. 内层循环

      • 从 i + 1 开始遍历未排序部分。

      • 如果找到比 min 更小的值,则更新 min 和 minIndex

    4. 交换最小值

      • 将找到的最小值与当前外层循环的位置 i 的值进行交换。

    5. 打印每轮排序后的数组

      • 每轮排序后,打印当前数组的状态。


示例运行过程

初始数组

[8, 65, 41, 28, 6, 1, 4, 5, 32, 9, 10]

每轮排序后的数组

  1. 第1轮

    • 找到最小值 1,与第一个元素 8 交换。

    • 结果:[1, 65, 41, 28, 6, 8, 4, 5, 32, 9, 10]

  2. 第2轮

    • 找到最小值 4,与第二个元素 65 交换。

    • 结果:[1, 4, 41, 28, 6, 8, 65, 5, 32, 9, 10]

  3. 第3轮

    • 找到最小值 5,与第三个元素 41 交换。

    • 结果:[1, 4, 5, 28, 6, 8, 65, 41, 32, 9, 10]

  4. 第4轮

    • 找到最小值 6,与第四个元素 28 交换。

    • 结果:[1, 4, 5, 6, 28, 8, 65, 41, 32, 9, 10]

  5. 第5轮

    • 找到最小值 8,与第五个元素 28 交换。

    • 结果:[1, 4, 5, 6, 8, 28, 65, 41, 32, 9, 10]

  6. 第6轮

    • 找到最小值 9,与第六个元素 28 交换。

    • 结果:[1, 4, 5, 6, 8, 9, 65, 41, 32, 28, 10]

  7. 第7轮

    • 找到最小值 10,与第七个元素 65 交换。

    • 结果:[1, 4, 5, 6, 8, 9, 10, 41, 32, 28, 65]

  8. 第8轮

    • 找到最小值 28,与第八个元素 41 交换。

    • 结果:[1, 4, 5, 6, 8, 9, 10, 28, 32, 41, 65]

  9. 第9轮

    • 找到最小值 32,与第九个元素 32 交换(无需交换)。

    • 结果:[1, 4, 5, 6, 8, 9, 10, 28, 32, 41, 65]

  10. 第10轮

    • 找到最小值 41,与第十个元素 41 交换(无需交换)。

    • 结果:[1, 4, 5, 6, 8, 9, 10, 28, 32, 41, 65]


最终排序结果

[1, 4, 5, 6, 8, 9, 10, 28, 32, 41, 65]

代码总结

  • 算法:选择排序。

  • 时间复杂度:O(n²),其中 n 是数组的长度。

  • 空间复杂度:O(1),原地排序,不需要额外的空间。

  • 优点:实现简单,适合小规模数据。

  • 缺点:时间复杂度较高,不适合大规模数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17134.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025有哪些关键词优化工具好用

越来越多的企业和个人开始意识到搜索引擎优化&#xff08;SEO&#xff09;对于网站曝光和业务增长的重要性。在SEO优化的过程中&#xff0c;关键词优化占据着至关重要的地位。关键词是用户在搜索引擎中输入的词语&#xff0c;优化关键词有助于提高网站在搜索结果中的排名&#…

(Xshell 8 + Xftp 8)下载安装miniconda至服务器指定目录+配置虚拟环境

一一一一 Xshell 8 Xftp 8均已登录&#xff0c;miniconda.sh安装包已经放在服务器指定目录中 二二二二 赋予脚本执行权限 chmod x Miniconda3-latest-Linux-x86_64.sh安装miniconda ./Miniconda3-latest-Linux-x86_64.sh -p /data1/huyan/zhangyifeng/miniconda3一直Enter…

Python学习

1 class MyClass:def __init__(self):print("Constructor called.")def __str__(self):return "MyClass instance"obj MyClass()print(obj) # 调用__str__方法 在Python中&#xff0c;__str__是一个特殊的方法&#xff0c;当你使用print()函数打印一个…

vueDevtools和文档整合(前端常用工具/插件)

3.vueDevtools安装 chrome插件vue-devtools下载地址&#xff1a; https://chrome.zzzmh.cn/info/nhdogjmejiglipccpnnnanhbledajbpd下载完放到chrome的拓展程序中即可&#xff0c;注意点&#xff1a;vue2和vue3下载版本不同&#xff0c;vue2的话使用稍微老点的版本才行。 详细…

dify.ai 配置链接到阿里云百练等云厂商的 DeepSeek 模型

要将 dify.ai 配置链接到阿里云百练等云厂商的 DeepSeek 模型. 申请阿里云百练的KEY 添加模型 测试模型

将Sqlite3数据库挂在内存上处理

创作灵感&#xff1a;最近把小学生的口算题从2位数改到3位数&#xff0c;100以内四则运算练习&#xff08;千纬数学&#xff09;再次更新&#xff0c;选取难题-CSDN博客要不断刷题目&#xff0c;以前100以内的加减乘除也是这样刷出来的&#xff0c;代码如下&#xff1a; impor…

【第1章:深度学习概览——1.1 深度学习的历史背景与发展轨迹】

你可能不知道,现在能自动给照片上色、帮医生看CT片、甚至写诗作曲的AI技术,其实早在二战时期就埋下了种子。这段故事里充满了天才的灵光乍现、整个行业的集体打脸、以及无数个"山穷水尽疑无路,柳暗花明又一村"的神转折。系好安全带,我们要从1943年的脑科学实验室…

九.Spring Boot使用 ShardingSphere + MyBatis + Druid 进行分库分表

文章目录 前言一、引入依赖二、创建一个light-db_1备用数据库三、配置文件 application-dev.yml四、创建shardingsphere-config.yml完整项目结构 五、测试总结 前言 在现代化微服务架构中&#xff0c;随着数据量的不断增长&#xff0c;单一数据库已难以满足高可用性、扩展性和…

XSS 常用标签及绕过姿势总结

XSS 常用标签及绕过姿势总结 一、xss 常见标签语句 0x01. 标签 <a href"javascript:alert(1)">test</a> <a href"x" onfocus"alert(xss);" autofocus"">xss</a> <a href"x" onclickeval(&quo…

Ubuntu20.04上搭建nginx正向代理提供上网服务

背景&#xff1a;公司很多电脑因软件管控问题不得不禁止设备上网&#xff0c;现需搭建上网代理服务器提供给这些用户使用。 操作系统&#xff1a;ubuntu20.04 工具&#xff1a;nginx-1.25.4 1、下载nginx安装包及依赖 由于nginx默认只持支持转发http协议&#xff0c;所以如…

deepseek的CoT优势、两阶段训练的有效性学习笔记

文章目录 1 DeepSeek的CoT思维链的优势1.2 open-r1的CoT训练数据1.3 ReAct任务与CoT任务适用场景 2 AI推理方向&#xff1a;deepseek与deepmind的两条路线的差异2.1 PRM与ORM的两大学派分支的差异2.2 DeepSeek-R1的两阶段训练概述 1 DeepSeek的CoT思维链的优势 DeepSeek跟之前…

DeepSeek批量生成全平台推广营销内容:高效提升营销效率

在这个信息爆炸的时代&#xff0c;内容营销的重要性不言而喻。无论是企业的官方网站、社交媒体账号&#xff0c;还是电商平台&#xff0c;都需要源源不断的高质量内容来吸引和留住用户。面对多平台发布的需求&#xff0c;人工撰写内容不仅耗时耗力&#xff0c;还容易出现内容质…

win11 终端乱码导致IDE 各种输出也乱码

因为 win11 终端乱码导致IDE 各种输出也乱码导致作者对此十分头大。所以研究了各种方法。 单独设置终端编码对 HKEY_CURRENT_USER\Console 注册表进行修改对 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processo 注册表进行修改使用命令[Console]::OutputEncoding [Syst…

字节Trae初使用感想

前言 大环境不好&#xff0c;公司为了降本增效。研发部门全员拥抱AI&#xff0c;前后端都要用起来。回归开发本源&#xff0c;前后端一个人做。 也不知道知道是哪位领导选型的&#xff0c;选的cursor&#xff0c;但是我不分享它&#xff0c;我分享Trae的初之验。也许是选curs…

笔记6——字典dict(dictionary)

文章目录 字典dict(dictionary)定义特点常用操作1.访问值2.添加键值对3.修改值4.删除键值对5.遍历字典6.合并字典 性能应用场景dict和list的区别 字典dict(dictionary) 以 键 - 值对 (key - value pairs)的形式存储数据 定义 字典使用花括号 {} 来定义&#xff0c;键和值之…

编译和链接【四】链接详解

文章目录 编译和链接【四】链接详解前言系列文章入口符号表和重定位表链接过程分段组装符号决议重定位 编译和链接【四】链接详解 前言 在我大一的时候&#xff0c; 我使用VC6.0对C语言程序进行编译链接和运行 &#xff0c; 然后我接触了VS&#xff0c; Qt creator等众多IDE&…

低空经济:开启未来空中生活的全新蓝海

引言 随着科技的进步&#xff0c;我们不再仅仅依赖地面交通和传统物流。你是否曾幻想过&#xff0c;未来的某一天&#xff0c;快递、外卖可以像魔法一样直接从空中送到你手中&#xff1f;或者&#xff0c;你能乘坐小型飞行器&#xff0c;快速穿梭于城市之间&#xff0c;告别拥堵…

IntegrAO整合不完整数据以实现患者分层

高通量组学分析技术的进步极大地推动了癌症患者的分层研究。然而&#xff0c;多组学整合中的数据不完整问题带来了巨大挑战&#xff0c;因为像样本排除或插补这样的传统方法常常会损害真实生物多样性。此外&#xff0c;将具有部分组学数据的新患者准确分类到现有亚型这一关键任…

[创业之路-299]:图解金融体系结构

一、金融体系结构 1.1 概述 金融体系结构是一个国家以行政的、法律的形式和运用经济规律确定的金融系统结构&#xff0c;以及构成这个系统的各种类型的银行和非银行金融机构的职能作用和相互关系。以下是对金融体系结构的详细分析&#xff1a; 1、金融体系的构成要素 现代金…

#渗透测试#批量漏洞挖掘#致远互联AnalyticsCloud 分析云 任意文件读取

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…