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

C语言经典算法之直接排序算法

目录

前言

一、代码实现

二、时空复杂度

时间复杂度:

空间复杂度:


前言

建议:1.学习算法最重要的是理解算法的每一步,而不是记住算法。

           2.建议读者学习算法的时候,自己手动一步一步地运行算法。

tips:希尔排序算法就是通过该算法衍生出来的,通过理解本算法可以为理解希尔排序打下基础。同时,本算法的逻辑简单。

直接排序算法,也称为选择排序(Selection Sort),是一种简单直观的排序算法。其基本思想是每一趟从待排序的数据元素中选择最小(或最大)的一个元素,将它与序列的第一个元素进行交换,然后再从剩余的元素中选择最小(或最大)的元素,与序列的第二个元素进行交换,如此循环,直到整个序列有序。总结就是,将无序元素与其前面的元素比较大小,以此来确定其位置,从而将其加入前面的有序的部分。

一、代码实现

#include <stdio.h>// 交换数组中两个元素的值
void swap(int *xp, int *yp) {int temp = *xp;*xp = *yp;*yp = temp;
}// 直接排序函数
void selectionSort(int arr[], int n) {int i, j, min_idx;// 选择排序的主循环for (i = 0; i < n-1; i++) {// 寻找在未排序部分中的最小元素的索引min_idx = i;for (j = i+1; j < n; j++)if (arr[j] < arr[min_idx])min_idx = j;// 将找到的最小元素与当前位置元素交换swap(&arr[min_idx], &arr[i]);}
}// 打印数组元素
void printArray(int arr[], int size) {for (int i = 0; i < size; i++)printf("%d ", arr[i]);printf("\n");
}int main() {int arr[] = {64, 25, 12, 22, 11};int n = sizeof(arr) / sizeof(arr[0]);printf("原始数组: \n");printArray(arr, n);// 调用直接排序算法selectionSort(arr, n);printf("\n排序后的数组: \n");printArray(arr, n);return 0;
}

在这段代码中,swap 函数用于交换数组中两个元素的值,而 selectionSort 函数实现了直接排序算法。主要的思路是在未排序的部分中找到最小元素的索引,然后与当前位置的元素进行交换,通过不断进行这样的操作,实现整个数组的排序。

二、时空复杂度

时间复杂度:

直接排序算法的时间复杂度主要由两层循环决定。

外层循环:外层循环的次数是 n-1,其中 n是数组的长度。这是因为在进行 n-1次选择后,剩下的最后一个元素已经有序了。

内层循环:内层循环用于在未排序的部分中寻找最小元素的索引。在最坏情况下,每次选择都需要遍历剩余未排序的元素。内层循环的次数是n,n-1,n-2,…,1。其平均时间复杂度为O(n^2)

综合考虑外层和内层循环(只要考虑n的次数大的复杂度),直接排序的时间复杂度为O(n^2)

平均/最好/最差时间复杂度均为O(n^2)

空间复杂度:

直接排序是一种原地排序算法,它只需要常数级别的额外空间来存储少量的辅助变量,如循环中的索引和临时变量。因此,直接排序的空间复杂度为 O(1),即常数级别的额外空间。

相关文章:

C语言经典算法之直接排序算法

目录 前言 一、代码实现 二、时空复杂度 时间复杂度&#xff1a; 空间复杂度&#xff1a; 前言 建议&#xff1a;1.学习算法最重要的是理解算法的每一步&#xff0c;而不是记住算法。 2.建议读者学习算法的时候&#xff0c;自己手动一步一步地运行算法。 tips:希尔排序算…...

前端开发vscode 常用插件记录

通用插件&#xff1a; 一、live Server 主要作用是提供一个本地开发服务器&#xff0c;以便实时预览和调试网页应用程序。 二、css peek 它的主要作用是帮助开发人员更轻松地查找和导航CSS样式表中的类、ID、选择器和样式定义&#xff08;鼠标移动到css样式名即可查看样式&…...

基于JavaWeb+BS架构+SpringBoot+Vue基于web的多媒体素材管理系统的设计和实现

基于JavaWebBS架构SpringBootVue基于web的多媒体素材管理系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 1 绪 论 1 1.1选题背景与意义 1 1.1 研究背景 1 1.2 研究意义…...

常用的dom操作

常用的dom操作 查找元素&#xff1a;可以使用 getElementById、querySelector、querySelectorAll 等方法来查找元素。创建元素&#xff1a;可以使用 createElement 方法创建新的元素节点。插入元素&#xff1a;可以使用 appendChild、insertBefore 等方法将元素插入到指定位置…...

Hotspot源码解析-第十七章-虚拟机万物创建(三)

17.4 Java堆空间内存分配 分配Java堆内存前&#xff0c;我们先通过两图来了解下C堆、Java堆、内核空间、native本地空间的关系。 1、从图17-1来看&#xff0c;Java堆的分配其实就是从Java进程运行时堆中选中一块内存区域来映射 2、从图17-2&#xff0c;可以看中各内存空间的…...

Spring MVC 的RequestMapping注解

RequestMapping注解 使用说明 作用&#xff1a;用于建立请求URL和处理请求方法之间的对应关系。 出现位置&#xff1a; 类上&#xff1a; 请求 URL的第一级访问目录。此处不写的话&#xff0c;就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以…...

navicat for oracle

前言 Oracle中的概念并不是创建数据库&#xff0c;而是创建一个表空间&#xff0c;然后再创建一个用户&#xff0c;设置该用户的默认表空间为我们新创建的表空间&#xff0c;这些操作之后&#xff0c;便和你之前用过的mysql数据库创建完数据库一模一样了。 创建数据库 使用O…...

行业分享----dbaplus174期:美团基于Orchestrator的MySQL高可用实践

记录 MySQL高可用方案-MMM、MHA、MGR、PXC https://blog.csdn.net/jycjyc/article/details/119731980 美团数据库高可用架构的演进与设想 https://tech.meituan.com/2017/06/29/database-availability-architecture.html...

springboot集成钉钉通知

目录 1.通过自定义机器人方式发送群消息 1.1说明 1.2发送普通消息示例&#xff08;采用加签方式&#xff09; 1.3注意事项 2.通过企业内部应用发送钉钉消息 2.1说明 2.2示例 2.3注意 1.通过自定义机器人方式发送群消息 1.1说明 官网地址&#xff1a; 自定义机器人发送…...

直播预告丨看零售场,如何玩转 MaaS

今年&#xff0c;有一个被频繁提及的词是MaaS 这类工具正在帮助千行百业实现大模型落地产业 在零售场&#xff0c;特别是像京东这样拥有超高并发、超复杂协同的电商场内 也沉淀出了一套通用的AI基础设施——九数算法中台 从提升客户服务体验、平台效率出发&#xff0c;训练各…...

高创新!EI论文复现+改进:聚合温度调控策略的综合能源系统/微电网/虚拟电厂多目标优化调度程序代码!

程序考虑供热的热惯性&#xff0c;并根据室内供热效果进行柔性供热&#xff0c;发挥热温度负荷的“储能”能力&#xff1b;针对普适性参数的室内空调进行集群研究&#xff0c;深入剖析温度设定值调整导致负荷波动的机理&#xff0c;并提出一种新的温度调整方法&#xff0c;平抑…...

详解Matlab深度学习进行波形分割

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 &#x1f510;#### 防伪水印——左手の明天 ####&#x1f510; &#x1f497; 大家…...

如何在Windows 10/11的防火墙中禁止和允许某个应用程序,这里提供详细步骤

想阻止应用程序访问互联网吗&#xff1f;以下是如何通过简单的步骤阻止和允许Windows防火墙中的程序。​ 一般来说&#xff0c;大多数用户永远不需要担心应用程序访问互联网。然而&#xff0c;在某些情况下&#xff0c;你需要限制应用程序访问互联网。 例如&#xff0c;有问题…...

vivado 添加现有IP文件、生成IP

添加现有IP文件 作为从AMD IP目录添加和自定义IP的替代方案&#xff0c;您可以直接添加XCI或XCIX文件。此过程不同于从按以下方式编目&#xff1a; •XCI或XCIX文件可能是早期版本&#xff0c;也可能是相同或完全自定义的版本AMD IP目录中发现的类似IP。 •XCI或XCIX文件可能…...

C++右值引用,右值引用与const引用的区别

1.右值与左值 左值&#xff1a;可以取地址的、有名字的变量&#xff0c;有持久性&#xff1b;右值&#xff1a;一般是不可寻址的常量&#xff0c;或在表达式求值过程中创建的无名临时对象&#xff0c;短暂性的。 2.右值引用 C11新增了另一种引用——右值引用。这种引用可指向…...

启英泰伦推出「离线自然说」,离线语音交互随意说,不需记忆词条

离线语音识别是指不需要依赖网络&#xff0c;在本地设备实现语音识别的过程&#xff0c;通常以端侧AI语音芯片作为载体来进行数据的采集、计算和决策。但是语音芯片的存储空间有限&#xff0c;通过传统的语音算法技术&#xff0c;最多也只能存储数百条词条&#xff0c;导致用户…...

Vulnhub-DC1

前言 一个比较简单的实战靶场&#xff0c;官方要求是找到/root下的flag&#xff0c;所以直接提权即可。但对于学习和训练来说还是太简略了&#xff0c;在打靶场的时候还是全面一些较好。 本次靶场实战涉及信息收集、漏洞查找与利用、getshell、数据库渗透、密码破解、linux提…...

【c++笔记】总结!c++与c语言的不同之处

(Θ&#xff13;Θ) hi~ 众所周知\(^o^)/~&#xff0c;c语言和c联系密切&#xff0c;又相互区别&#xff0c;本篇文章主要介绍c与c语言的区别与联系以及一些简单的不同点的运用&#xff0c;很适合刚接触c的朋友&#xff0c;一起来瞧瞧看吧~~ 目录 一、文章内容梗概 二、概念…...

大模型PEFT技术原理(一):BitFit、Prefix Tuning、Prompt Tuning

随着预训练模型的参数越来越大&#xff0c;尤其是175B参数大小的GPT3发布以来&#xff0c;让很多中小公司和个人研究员对于大模型的全量微调望而却步&#xff0c;近年来研究者们提出了各种各样的参数高效迁移学习方法&#xff08;Parameter-efficient Transfer Learning&#x…...

VMware vSphere运维管理手册

适用版本:VMware vSphere 7.0 VMware vSphere 是 VMware 的虚拟化平台,可将数据中心转换为包括 CPU、存储和网络资源的聚合计算基础架构。vSphere 将这些基础架构作为一个统一的运行环境进行管理,并为您提供工具来管理加入该环境的数据中心。 ![[Pasted image 20231212132…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...