手撕排序之直接选择排序
前言:
直接选择排序是排序中比较简单的排序,同时也是时间复杂度不是很优的排序。
思想:
本文主要讲解直接选择排序的优化版本。
我们经过一次遍历直接将该数列中最大的和最小的值挑选出来,如果是升序,就将最小的和首元素进行交换,最大的与尾元素进行交换。然后将首部元素++,尾部元素--,重新遍历再次选择次大的和次小的。以此类推。
注意:
按照上面的思路会遇到一些特殊情况,造成排序的失败。
比如说我们先将最大的值赋给尾部元素,如果最大的值正好在头部元素,而最小的值恰好在尾部元素,这样就导致把最大的元素赋给尾部元素时,会把尾部本来的最小值覆盖掉,造成排序的失败。
为了解决这种情况,我们只需要将尾部元素提前存储好就欧克拉~
原码:
void SelectSort(int* a, int n)
{int begin = 0;int end = n - 1;while (begin <= end){int maxi = begin, mini = begin;for (int i = begin + 1; i < end + 1; i++){//找出最大值和最小值的下标if (a[i] > a[maxi])maxi = i;if (a[i] < a[mini])mini = i;}Swap(&a[begin], &a[mini]);//max如果被换走,就修正以下if (maxi == begin)maxi = mini;Swap(&a[end], &a[maxi]);begin++;end--;}
}
时间复杂度:
n + n-2 + n - 4 + n - 6……
这也是一个等差数列,所以时间复杂度就是O(N^2)。
显然这并不是一个优的排序算法。
相关文章:
手撕排序之直接选择排序
前言: 直接选择排序是排序中比较简单的排序,同时也是时间复杂度不是很优的排序。 思想: 本文主要讲解直接选择排序的优化版本。 我们经过一次遍历直接将该数列中最大的和最小的值挑选出来,如果是升序,就将最小的和…...
洛谷 P1359 租用游艇
题目链接 P1359 租用游艇 普及 题目描述 长江游艇俱乐部在长江上设置了 n n n 个游艇出租站 1 , 2 , 3 , . . . , n 1,2,3,...,n 1,2,3,...,n,游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站 i i i 到游艇出租站…...
springboot中没有主清单属性解决办法
在执行一个 spring boot 启动类时,提示 没有主清单属性 一般这个问题是没加 spring-boot-maven-plugin 插件的问题,但是项目中已经加了 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifa…...
C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)
目录 一、前言 二、static关键字是什么? 三、static关键字修饰的对象是什么? 四、C 语言中的 static 🍎static的C用法 🍉static的重点概念 🍐static修饰局部变量 💦static在修饰局部变量和函数的作用 &a…...
windwos10搭建我的世界服务器,并通过内网穿透实现联机游戏Minecraft
文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …...
【实战Flask API项目指南】之七 用JWT进行用户认证与授权
实战Flask API项目指南之 用JWT进行用户认证与授权 本系列文章将带你深入探索实战Flask API项目指南,通过跟随小菜的学习之旅,你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧! 前言 当小菜踏入Flask后端开发…...
鸿蒙LiteOs读源码教程+向LiteOS中添加一个简单的基于线程运行时的短作业优先调度策略
【⭐据说点赞收藏的都会收获好运哦👍】 一、鸿蒙Liteos读源码教程 鸿蒙的源码是放在openharmony文件夹下,openharmony下的kernel文件夹存放操作系统内核的相关代码和实现。 内核是操作系统的核心部分,所以像负责:资源管理、任…...
axios的使用与封装详细教程
目录 一、axios使用方式二、axios在main.js配置 一、axios使用方式 在 Spring Boot Vue 的项目中使用 Axios,你需要在 Vue 项目中安装 Axios 库,因为 Axios 是一个前端 JavaScript 库,用于发送 HTTP 请求和处理响应数据,而与 Sp…...
C++二叉搜索树
本章主要是二叉树的进阶部分,学习搜索二叉树可以更好理解后面的map和set的特性。 1.二叉搜索树概念 二叉搜索树的递归定义为:非空左子树所有元素都小于根节点的值,非空右子树所有元素都大于根节点的值,而左右子树也是二叉搜索树…...
elasticsearch索引按日期拆分
1.索引拆分原因 如果单个索引数据量过大会导致搜索变慢,而且不方便清理历史数据。 例如日志数据每天量很大,而且需要定期清理以往日志数据。例如原索引为sc_all_system_log,现按天拆分索引sc_all_system_log20220902,sc_all_syste…...
纯python实现大漠图色功能
大漠图色是一种自动化测试工具,可以用于识别屏幕上的图像并执行相应的操作。在Python中,可以使用第三方库pyautogui来实现大漠图色功能。具体步骤如下: 安装pyautogui库:在命令行中输入pip install pyautogui。导入pyautogui库&a…...
debounce and throtlle
debounce // 核心:单位时间内触发>1 则只执行最后一次。//excutioner 可以认为是执行器。执行器存在则清空,再赋值新的执行器。function debounce(fn, delay 500) {let excutioner null;return function () {let context this;let args arguments…...
四、数据库系统
数据库系统(Database System),是由数据库及其管理软件组成的系统。数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理系统,也是一个为实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介…...
Linux中的高级IO
文章目录 1.IO1.1基本介绍1.2基础io的低效性1.3如何提高IO效率1.4五种IO模型1.5非阻塞模式的设置 2.IO多路转接之Select2.1函数的基本了解2.2fd_set理解2.3完整例子代码(会在代码中进行讲解)2.4优缺点 3.多路转接之poll3.1poll函数的介绍3.2poll服务器3.…...
项目管理之如何估算项目工作成本
在项目管理中,如何估算项目工作成本是一个关键问题。为了解决这个问题,我们可以采用自上而下的成本限额估算法和自下而上的成本汇总估算法。这两种方法各有优缺点,但都可以帮助我们准确地估算项目工作成本。 自上而下的成本限额估算法 自上…...
Redis主从复制基础概念
Redis主从复制:提高数据可用性和性能的策略 一、概述 Redis主从复制是一种常用的高可用性策略,通过将数据从一个Redis服务器复制到另一个或多个Redis服务器上,以提高数据的可用性和读取性能。当主服务器出现故障时,可以快速地切…...
图数据库Neo4j概念、应用场景、安装及CQL的使用
一、图数据库概念 引用Seth Godin的说法,企业需要摒弃仅仅收集数据点的做法,开始着手建立数据之间的关联关系。数据点之间的关系甚至比单个点本身更为重要。 传统的**关系数据库管理系统(RDBMS)**并不擅长处理数据之间的关系,那些表状数据模…...
路由器基础(四): RIP原理与配置
路由信息协议 (Routing Information Protocol,RIP) 是最早使用的距离矢量路由协议。因为路由是以矢量(距离、方向)的方式被通告出去的,这里的距离是根据度量来决定的,所以叫“距离矢量”。 距离矢量路由算法是动态路由算法。它的工作流程是:…...
红外遥控开发RK3568-PWM-IR
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1.红外遥控的发送接收工作原理2.红外协议3.红外遥控系统框图4.遥控器添加方法4.1 记录键值4.2 添加键值总结前言 提示:这里可以添加本文要记录的大概内容: 1.红外遥控的发送接收工作原理 …...
go-sync-mutex
Sync Go 语言作为一个原生支持用户态进程(Goroutine)的语言,当提到并发编程、多线程编程时,往往都离不开锁这一概念。锁是一种并发编程中的同步原语(Synchronization Primitives),它能保证多…...
Multi-Agent在金融投研中的应用:从信息整合到报告生成实战
Multi-Agent在金融投研中的应用:从信息整合到报告生成实战 摘要/引言 开门见山 各位金融界的朋友、AI领域的探索者们,不知道你们有没有注意到一个现象:2023年以来,全球顶尖资管机构(如贝莱德、桥水、摩根大通)的投研团队中,“AI Agent协作小组”的曝光率突然暴涨——…...
renderer数学库解析:3D图形学中的向量、矩阵与四元数
renderer数学库解析:3D图形学中的向量、矩阵与四元数 【免费下载链接】renderer A shader-based software renderer written from scratch in C89 项目地址: https://gitcode.com/gh_mirrors/re/renderer 想要从零开始构建一个完整的3D渲染器吗?r…...
深入解析CAN(FD)转以太网:从协议到实践的全方位指南
1. CAN(FD)与以太网协议基础解析 第一次接触CAN(FD)转以太网设备时,我完全被各种专业术语搞晕了。后来在实际项目中摸爬滚打才发现,理解底层协议才是用好这类设备的关键。CAN(FD)本质上是CAN总线的升级版,就像单车道升级为双车道,…...
24GB显存利用率优化:OpenClaw长任务链对接Qwen3-14B的7个技巧
24GB显存利用率优化:OpenClaw长任务链对接Qwen3-14B的7个技巧 1. 为什么需要关注显存利用率? 上周我尝试用OpenClaw自动化处理一个包含200份PDF文档的信息提取任务时,系统在运行到第37个文件时突然崩溃。查看日志才发现是显存耗尽导致的OOM…...
Java版Playwright实战:从零开始搭建自动化测试框架(含完整代码示例)
Java版Playwright实战:从零开始搭建自动化测试框架(含完整代码示例) 在当今快节奏的软件开发环境中,自动化测试已成为保障产品质量不可或缺的一环。对于Java开发者而言,Playwright以其跨浏览器支持、现代化API设计和出…...
终端用户的福音:Gemma-3-12b-it镜像+OpenClaw免开发体验
终端用户的福音:Gemma-3-12b-it镜像OpenClaw免开发体验 1. 为什么这是终端用户的转折点 上周我帮一位做外贸的朋友配置自动化日报系统时,她盯着终端里滚动的命令行突然问我:"有没有不用写代码也能让AI干活的方法?"这个…...
GT511C3指纹模块嵌入式驱动开发与工程实践
1. GT511C3指纹识别模块底层驱动技术解析GT511C3是由Digital Persona公司推出的高性能光学指纹识别模块,广泛应用于门禁系统、考勤终端、金融支付设备及嵌入式身份认证场景。该模块基于ARM7TDMI内核主控,集成专用图像处理引擎与模板匹配协处理器…...
TypeScript + Cloudflare 全家桶部署项目全流程
我的项目技术栈是 TypeScript Cloudflare 全家桶(Workers, KV, DB, Pages)。基于现在的架构,我整理了一份**“从本地到边缘”的部署清单**。这套流程主要依赖 Wrangler CLI(Cloudflare 的官方命令行工具)来完成。 以下…...
孤能子视角:“人“的关系线束
(EIS下的"人"不同于实体的"人"。但这里不做比对。姑且当科幻小说看) 我的问题: 1."人"这条线,你能串联起多少知识? 2.Kimi分析。 3.信兄对Kimi分析的反馈。 (注:DeepSeek居然对Kimi的意见既有坚持又有吸收。另外&…...
基于 MATLAB 的交叉偏导数(CPD)约束盲图像去模糊系统实现与分析——输出去模糊前后对比图像及模糊核分布。
操作环境:MATLAB 2024a1、算法描述基于MATLAB的交叉偏导数(CPD)盲图像去模糊系统,是一种结合图像特征分析、频域滤波以及正则化思想的综合性图像复原方案。整个系统的设计核心在于通过交叉偏导数特征提取模糊方向信息,…...
