当前位置: 首页 > news >正文

排序算法之选择排序

        选择排序(Selection Sort)是一种简单直观的排序算法,其基本思路是在未排序的数据序列中找到最小元素,将其放在已排序的数据序列的末尾。重复该过程,直到整个序列排序完成。

        具体实现过程如下:

  1. 首先,找到未排序序列中最小的元素,将其放在已排序序列的末尾。
  2. 然后,从未排序序列中剩余的元素中找到最小的元素,将其放在已排序序列的末尾。
  3. 重复上述步骤,直到未排序序列中的所有元素都被放置到已排序序列的末尾,即排序完成。

        选择排序的时间复杂度为O(n^2),其中n为序列长度。虽然其时间复杂度较高,但是选择排序的空间复杂度比较低,仅为O(1),且其实现较为简单,因此在数据量较小时,选择排序仍然是一个可行的排序算法。

        以下是选择排序的Java代码实现:

public static void selectionSort(int[] arr) {int len = arr.length;for (int i = 0; i < len - 1; i++) {int minIndex = i;for (int j = i + 1; j < len; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}// Swap the elementsint temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}
}

        在该代码中,我们使用了两个循环嵌套来实现选择排序。外层循环用于遍历整个序列,内层循环则用于在未排序的元素中找到最小的元素。在每次遍历中,我们都将找到的最小元素放置到已排序序列的末尾,以便下一轮遍历。

        该实现中,我们使用了一个minIndex变量来记录未排序序列中最小元素的下标。如果内层循环中找到了比当前最小元素更小的元素,则将minIndex更新为该元素的下标。在遍历完整个未排序序列后,我们就可以将找到的最小元素放置到已排序序列的末尾。

        最后,我们使用一个临时变量temp来交换最小元素和当前遍历位置的元素。这样就完成了一次选择排序操作。

选择排序总结:

        选择排序(Selection Sort)的主要优点是实现简单,代码量较少,同时空间复杂度为常数级别,仅为O(1),不需要额外的空间开销。此外,它在处理小规模的数据时比较高效。

        然而,选择排序的缺点也很明显。它的时间复杂度为O(n^2),其中n为序列长度,因此在数据规模较大的情况下,它的效率比较低,甚至可能无法承受。而且,它每次只能将一个元素放置到已排序序列的末尾,因此它是一种稳定性不好的排序算法

        选择排序适用于数据规模较小的情况下,可以作为其他排序算法的优化算法。在一些特殊的场景下,例如需要在一个大规模的无序数据集中寻找最小或最大的几个元素时,选择排序也可以发挥出很好的作用。

相关文章:

排序算法之选择排序

选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法&#xff0c;其基本思路是在未排序的数据序列中找到最小元素&#xff0c;将其放在已排序的数据序列的末尾。重复该过程&#xff0c;直到整个序列排序完成。 具体实现过程如下&#xff1a; 首先&#x…...

5_服务编排_docker-compose

服务编排之Docker Compose 微服务架构的应用系统中一般包含若干个微服务&#xff0c;每个微服务一般都会部署多个实例&#xff0c;如果每个微服务都要手动启停&#xff0c;维护的工作量会很大。 要从Dockerfile build image 或者去dockerhub拉取image 要创建多个container 要…...

Java基本数据类型以及包装类型的常量池技术

Java 中的基本数据类型 Java 中有 8 种基本数据类型&#xff0c;分别为&#xff1a; 6 种数字类型&#xff1a; 4 种整数型&#xff1a;byte、short、int、long2 种浮点型&#xff1a;float、double 1 种字符类型&#xff1a;char1 种布尔型&#xff1a;boolean。 这 8 种基本…...

P1054 [NOIP2005 提高组] 等价表达式

题目描述 明明进了中学之后&#xff0c;学到了代数表达式。有一天&#xff0c;他碰到一个很麻烦的选择题。这个题目的题干中首先给出了一个代数表达式&#xff0c;然后列出了若干选项&#xff0c;每个选项也是一个代数表达式&#xff0c;题目的要求是判断选项中哪些代数表达式…...

什么牌子蓝牙耳机好用不贵?国产性价比高的蓝牙耳机推荐

相较于有线耳机&#xff0c;无线蓝牙耳机更便携、功能更丰富&#xff0c;不用受到耳机孔与线的限制。那么&#xff0c;什么牌子的蓝牙耳机好用不贵&#xff1f;针对这个问题&#xff0c;我给大家推荐几款国产性价比高的蓝牙耳机&#xff0c;可以当个参考。 一、南卡小音舱Lite…...

明明花钱上了ERP,为什么还要我装个MES系统

目前&#xff0c; ERP系统依旧是很多制造企业的选择。据统计&#xff0c;ERP系统的应用已经达到70&#xff05;以上&#xff0c;但是在车间的应用&#xff0c; MES系统的应用比例并不高。那么&#xff0c;为什么现在很多企业又都选择再上个MES呢&#xff1f; MES系统是一个面向…...

JAVA中的集合框架有哪些?

在Java中&#xff0c;集合&#xff08;Collection&#xff09;是一组对象的容器&#xff0c;而集合框架&#xff08;Collection Framework&#xff09;是一组接口、实现类和算法&#xff0c;用于存储和操作集合。Java集合框架提供了一组通用的、高性能的、可扩展的接口和类&…...

用Jmeter进行接口自动化测试的工作流程你知道吗?

目录 测试流程 接口测试相关文档管理规范 接口测试要点 测试流程 在测试负责人接受到测试任务后&#xff0c;应该按照以下流程规范完成测试工作。 2.1 测试需求分析 产品开发负责人在完成某产品功能的接口文档编写后&#xff0c;在核对无误后下发给对应的接口测试负责人…...

Java 中的设计模式有哪些?(十九)

Java设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 设计模式可以帮助我们解决软件开发过程中面临的一般问题&#xff0c;提高代码的可读性、可复用性和可扩展性。 Java中一般认为有23种设计模式&#xff0c;总体来说设计模式分为三大类&…...

奇数单增序列

题目描述 给定一个长度为 N&#xff08;不大于 500&#xff09;的正整数序列&#xff0c;请将其中的所有奇数取出&#xff0c;并按升序输出。 输入格式 第 1 行为 N&#xff1b;第 2 行为 N 个正整数&#xff0c;其间用空格间隔。 输出格式 增序输出的奇数序列&#xff0c…...

Seata介绍

介绍&#xff1a; Seata的设计目标是对这个业务无侵入&#xff0c;因此从业务无侵入的2PC方案开始的&#xff0c;在传统的2PC的基础上演进的。它把一个分布式事务拆分理解成一个包含了若干分支事务的全局事务。全局事务的职责是协调其下管辖的分支事务达成一致性&#xff0c;要…...

VK Cup 2017 - Round 1 A - Bear and Friendship Condition(并查集维护大小 + dfs 遍历图统计边数)

题目大意&#xff1a; 给你一些n个点m条边&#xff0c;如果三个点&#xff08;a,b,c&#xff09;是合法的&#xff0c;当且仅当 a-b,b-c,c-a都有一条边&#xff0c;问你这个图是否合法&#xff0c;如果有一个或两个点视为合法 思路 考虑什么图才是个合法图&#xff1a;除了点…...

为UOS启用VNC和Windows远程桌面

1 参考资料 UOS系统中安装x11vnc远程桌面 如何通过windows电脑远程UOS桌面RDP 已在ARM版本和X86版本中验证均可用 2 准备工作 2.1 设置代理&#xff08;可选&#xff09; 如果设备本身能和公网通&#xff0c;就不需要了。 由于我们全程需要在root账号下进行&#xff0c;系…...

Java时间类(七)-- LocalDateTime()类

目录 1. LocalDateTime的概述: 2. LocalDateTime的常用方法: 1. LocalDateTime的概述: 是一个不可变的日期-时间对象,表示日期和时间,而没有时区。 它基于ISO-8601日历系统,是由日期和时间组合而成。它可以存储到纳秒级精度,并提供了各种方法来处理日期和时间的运算…...

卢北辰:数据点亮梦想,能力驱动人生 | 提升之路系列(九)

导读 为了发挥清华大学多学科优势&#xff0c;搭建跨学科交叉融合平台&#xff0c;创新跨学科交叉培养模式&#xff0c;培养具有大数据思维和应用创新的“π”型人才&#xff0c;由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组织的“清华大学大数据能力提升项…...

数据库基础及用户管理授权

数据库概念 关系型数据库 数据结构二维表格 库 -> 表 -> 列&#xff08;字段&#xff09;&#xff1a;用来描述对象的的一个属性&#xff1b;行&#xff1a;用来描述一个对象的信息 mysql&#xff08;5.7/8.0&#xff09; maridb ocracle postgresql sqlserver(windows…...

比特米盒子刷安卓ATV6.0

最近海鲜市场有很多比特米盒子&#xff0c;50多块包邮&#xff0c;买来的盒子回来折腾下&#xff0c;买回来发现一直卡在“系统启动"中无法进入&#xff0c;不知道原来的是啥系统&#xff0c;看来只能找找线刷的办法&#xff0c;重新拯救救个这盒子。 原文链接地址&#x…...

【用python的QT做信号处理的界面】

文章目录 入口文件界面参数调整数据从dat解析出来的文件从界面点击打开文件夹的功能实现主要功能代码网络参数存图替换功能&#xff0c;比如把倒频谱替换成倒频谱2 入口文件 入口文件&#xff0c;主要用来实例化窗口&#xff08;不重要&#xff09;&#xff0c;只要知道从这里…...

【Linux】进程间通信 —— 管道

文章目录 &#x1f4d5; 进程间通信介绍&#x1f4d5; 匿名管道原理使用读写规则特点 &#x1f4d5; 命名管道原理使用匿名管道和命名管道的区别 &#x1f4d5; 进程间通信介绍 进程间通信&#xff0c;顾名思义&#xff0c;就是两个进程之间的 “交流” &#xff0c;我们知道&…...

知识管理在企业中的重要性

随着经济全球化和信息化的快速发展&#xff0c;企业面临着越来越多的竞争和挑战。如何把握市场动态、满足客户需求、提高产品质量和效率等&#xff0c;成为了企业发展中亟待解决的问题。而知识管理作为一种新兴的管理方式&#xff0c;逐渐引起了企业们的重视。本文将从以下几个…...

3大维度解析BGE向量技术:从原理到检索增强实践

3大维度解析BGE向量技术&#xff1a;从原理到检索增强实践 【免费下载链接】FlagEmbedding Dense Retrieval and Retrieval-augmented LLMs 项目地址: https://gitcode.com/GitHub_Trending/fl/FlagEmbedding 文本嵌入技术是现代AI系统的核心组件&#xff0c;而检索增强…...

开源工具MelonLoader:Unity游戏模组开发的3大突破与零基础上手指南

开源工具MelonLoader&#xff1a;Unity游戏模组开发的3大突破与零基础上手指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader …...

从Flamingo到MiniCPM-V 4.5:聊聊那些‘内置’视觉压缩的黑科技,以及我们为什么需要它

从Flamingo到MiniCPM-V 4.5&#xff1a;视觉压缩技术的系统级设计哲学 当一张4K高清图像被拆解成数万个视觉token时&#xff0c;工程师们面对的不仅是算力挑战&#xff0c;更是一场关于信息本质的思辨。为什么Flamingo选择固定64个潜在token&#xff1f;MiniCPM-V 4.5的3D-Res…...

RTKLIB进阶指南:深入理解北斗三代CNAV电文与BDS-3星历数据结构

RTKLIB进阶指南&#xff1a;北斗三代CNAV电文与星历数据结构深度解析 当你在RTKLIB的源码中第一次看到eph_t结构体里那些神秘的Adot、ndot字段时&#xff0c;是否好奇过它们如何精确描述北斗三号卫星的轨道变化&#xff1f;这些看似简单的浮点数背后&#xff0c;隐藏着中国自主…...

学习记录:数据预处理流程全解析

学习记录&#xff1a;数据预处理流程全解析 在大数据分析过程中&#xff0c;数据预处理是极为关键的环节&#xff0c;它直接影响到后续分析结果的准确性和可靠性。近期深入学习了数据预处理的各个流程&#xff0c;包括数据清洗、数据集成、数据变换和数据归约&#xff0c;下面将…...

不用编译!快速修改Scratch-blocks积木字体的偷懒方法

零编译实战&#xff1a;Scratch-blocks字体调整极简方案 在Scratch 3.0的二次开发过程中&#xff0c;积木字体过小是开发者普遍遇到的痛点。官方移除了字体调节功能后&#xff0c;低分辨率设备上的中文显示尤为模糊。传统解决方案需要配置Python环境并重新编译scratch-blocks库…...

OpenClaw多模型切换:百川2-13B与Qwen在任务链中的混合调用策略

OpenClaw多模型切换&#xff1a;百川2-13B与Qwen在任务链中的混合调用策略 1. 为什么需要多模型混合调用&#xff1f; 去年冬天&#xff0c;当我第一次尝试用OpenClaw自动化处理周报时&#xff0c;发现一个有趣的现象&#xff1a;同一个模型在写作创意部分和代码生成环节的表…...

别再只用DataParallel了!PyTorch单机多卡训练保姆级教程(从DP到DDP实战避坑)

从DataParallel到DDP&#xff1a;PyTorch单机多卡训练深度优化指南 当你的模型参数突破1亿大关&#xff0c;单卡训练时间从几小时延长到几天时&#xff0c;多GPU并行训练就从一个可选项变成了必选项。但面对PyTorch提供的DataParallel(DP)和DistributedDataParallel(DDP)两种方…...

如何利用系统提示词革新开源项目的AI功能实现

如何利用系统提示词革新开源项目的AI功能实现 【免费下载链接】system_prompts_leaks 项目地址: https://gitcode.com/GitHub_Trending/sy/system_prompts_leaks 在人工智能技术快速发展的今天&#xff0c;系统提示词已成为解锁AI潜能的关键钥匙。对于开源项目而言&…...

Ostrakon-VL-8B与传统算法对比展示:在复杂背景下的菜品分割

Ostrakon-VL-8B与传统算法对比展示&#xff1a;在复杂背景下的菜品分割 不知道你有没有遇到过这样的烦恼&#xff1a;想给美食拍张照&#xff0c;结果背景里堆满了杂乱的餐具、餐巾纸&#xff0c;甚至还有手机和钥匙&#xff0c;想单独把菜品抠出来&#xff0c;用传统的修图工…...