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

【C/C++ 01】初级排序算法

排序算法通常是针对数组或链表进行排序,在C语言中,需要手写排序算法完成对数据的排序,排序规则通常为升序或降序(本文默认为升序),在C++中,<algorithm>头文件中已经封装了基于快排算法的 std::sort() 函数,但是快速排序是不稳定的排序算法,于是<algorithm>中还包含了 stable_sort() 函数,即保留了等值元素的相对顺序。

稳定性:通常,在排序算法中,稳定性是指如果两个元素在原始数组中的相对顺序保持不变,则在排序后它们的相对顺序也应该保持不变。换句话说,如果有两个相等的元素,它们的位置在排序之前是 a 和 b,且 a 在 b 的前面,那么在排序后,a 仍然应该在 b 的前面。

在进行排序算法之前,先定义一个用于交换元素位置的函数:

void Swap(int* a, int* b)
{int tmp = *a;*a = *b;*b = tmp;
}

一、冒泡排序(Bubble Sort)

冒泡排序的核心算法是暴力求解思维,是指将所有元素都相互比较一次,若靠前的数比靠后的数大,则将两个数交换位置。

  • 排序对象:数组
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 是否稳定:是
void BubbleSort(int* arr, int n)
{for (int i = 0; i < n; ++i){for (int j = 0; j < n - i - 1; ++j){if (arr[j] > arr[j + 1]){Swap(&arr[j], &arr[j + 1]);}}}
}

二、插入排序(Insert Sort)

插入排序的核心算法是将当前遍历到的地方的末尾数据往前比较,找到合适的位置进行插入,直到遍历到最后一个数据。

  • 排序对象:数组、链表
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 是否稳定:是
void InsertSort(int* arr, int n)
{int i = 1;for (; i < n; ++i){int j = i;int end = arr[j];while (j > 0 && arr[j - 1] > end){arr[j] = arr[j - 1];--j;}arr[j] = end;}
}

三、选择排序(Select Sort)

选择排序的算法核心是找到数组的最大值和最小值,将其和遍历数组的左右端进行交换,然后左端右移、右端左移。简易版的选择排序算法会只找一个最值进行交换。

  • 排序对象:数组、链表
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 是否稳定:否
void SelectSort(int* arr, int n)
{int left = 0;int right = n - 1;while (left < right){int iMin = left; int iMax = right;for (int i = left; i <= right; ++i){if (arr[i] < arr[iMin])iMin = i;if (arr[i] > arr[iMax])iMax = i;} Swap(&arr[left], &arr[iMin]);if (left == iMax)iMax = iMin;Swap(&arr[right], &arr[iMax]);++left;--right;}
}

相关文章:

【C/C++ 01】初级排序算法

排序算法通常是针对数组或链表进行排序&#xff0c;在C语言中&#xff0c;需要手写排序算法完成对数据的排序&#xff0c;排序规则通常为升序或降序&#xff08;本文默认为升序&#xff09;&#xff0c;在C中&#xff0c;<algorithm>头文件中已经封装了基于快排算法的 st…...

Android Settings 显示电池点亮百分比

如题&#xff0c;Android 原生 Settings 里有个 电池电量百分比 的选项&#xff0c;打开后电池电量百分比会显示在状态栏。 基于 Android 13 &#xff0c; 代码在 ./packages/apps/Settings/src/com/android/settings/display/BatteryPercentagePreferenceController.java &am…...

Windows记事本不显示下划线的原因及解决方法

最近使用Windows 记事本敲代码发现一个问题&#xff1a;代码中的下划线无法显示&#xff01;&#xff01;&#xff01;(字体为“微软雅黑”、字体大小为11下&#xff0c;代码中的下划线无法显示。当然每个人情况可能不同) 在 Windows 记事本中&#xff0c;下划线可能会因为 字体…...

嵌入式软件工程师面试题——2025校招社招通用(C/C++)(四十六)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…...

【学网攻】 第(13)节 -- 动态路由(OSPF)

系列文章目录 目录 系列文章目录 文章目录 前言 一、动态路由是什么&#xff1f; 二、实验 1.引入 实验拓扑图 实验配置 实验验证 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学…...

Asp.Net Core 获取应用程序相关目录

在ASP.NET Core中&#xff0c;可以通过以下三种方式获取应用程序所在目录&#xff1a; 1、使用AppContext.BaseDirectory属性&#xff1a; string appDirectory AppContext.BaseDirectory; 例如&#xff1a;D:\后端项目\testCore\test.WebApi\bin\Debug\net6.0\ 2、使用…...

文献速递:人工智能医学影像分割--- 深度学习分割骨盆骨骼:大规模CT数据集和基线模型

文献速递&#xff1a;人工智能医学影像分割— 深度学习分割骨盆骨骼&#xff1a;大规模CT数据集和基线模型 我们为大家带来人工智能技术在医学影像分割上的应用文献。 人工智能在医学影像分析中发挥着至关重要的作用&#xff0c;尤其体现在图像分割技术上。这项技术的目的是准…...

PaddleNLP的简单使用

1 介绍 PaddleNLP是一个基于PaddlePaddle深度学习平台的自然语言处理&#xff08;NLP&#xff09;工具库。 它提供了一系列用于文本处理、文本分类、情感分析、文本生成等任务的预训练模型、模型组件和工具函数。 PaddleNLP有统一的应用范式&#xff1a;通过 paddlenlp.Task…...

2. MySQL 多实例

重点&#xff1a; MySQL 的 三种安装方式&#xff1a;包安装&#xff0c;二进制安装&#xff0c;源码编译安装。 MySQL 的 基本使用 MySQL 多实例 DDLcreate alter drop DML insert update delete DQL select 2.5&#xff09;通用 二进制格式安装 MySQL 2.5.1&#xff…...

两个五层决策树和一个十层决策树的区别

随机森林的弹性: 随机森林中的多个决策树是相互独立构建的&#xff0c;因此两个五层决策树和一个十层决策树之间的区别可能在于它们对训练数据的不同学习。这种弹性有助于模型更好地适应不同的数据模式。 过拟合风险: 十层决策树可能更容易过拟合训练数据&#xff0c;尤其是在数…...

案例分析技巧-软件工程

一、考试情况 需求分析&#xff08;※※※※&#xff09;面向对象设计&#xff08;※※&#xff09; 二、结构化需求分析 数据流图 数据流图的平衡原则 数据流图的答题技巧 利用数据平衡原则&#xff0c;比如顶层图的输入输出应与0层图一致补充实体 人物角色&#xff1a;客户、…...

如何使用docker compose安装APITable并远程访问登录界面

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 …...

深入了解Matplotlib中的子图创建方法

深入了解Matplotlib中的子图创建方法 一 add_axes( **kwargs):1.1 函数介绍1.2 示例一 创建第一张子图1.2 示例二 polar参数的运用1.3 示例三 创建多张子图 二 add_subplot(*args, **kwargs):2.1 函数介绍2.2 示例一 三 两种方法的区别3.1 参数形式3.2 布局灵活性3.3 适用场景3…...

云计算运维 · 第三阶段 · git

学习b记 第三阶段 三、持续集成 1、git #安装 yum -y install git[rootgit-git ~]# git config –-global user.name "qxl" # 配置git使用用户 [rootgit-git ~]# git config –-global user.email "qxlmail.com" # 配置git使用邮箱 [rootgit-git ~]# g…...

【幻兽帕鲁】开服务器,高性能高带宽(100mbps),免费!!!【学生党强推】

【幻兽帕鲁】开服务器&#xff0c;高性能高带宽&#xff08;100mbps&#xff09;&#xff0c;免费&#xff01;&#xff01;&#xff01;【学生党强推】 教程相关视频地址&#xff1a;https://www.bilibili.com/video/BV16e411Y7Fd/ 目前幻兽帕鲁开服务器有以下几套比较性价比的…...

微信小程序|推箱子小游戏

推箱子游戏是一种经典的益智游戏,通过移动箱子将其推到指定位置,完成关卡的过程。随着小程序的发展,越来越多的人开始在手机上玩推箱子游戏。本文将介绍如何利用小程序实现推箱子游戏,并分享一些技术实现的方法。 目录 引言游戏背景介绍游戏规则及挑战技术实现步骤创建游戏…...

【Linux】—— 信号的产生

本期&#xff0c;我们今天要将的是信号的第二个知识&#xff0c;即信号的产生。 目录 &#xff08;一&#xff09;通过终端按键产生信号 &#xff08;二&#xff09;调用系统函数向进程发信号 &#xff08;三&#xff09;由软件条件产生信号 &#xff08;四&#xff09;硬件…...

【算法】Hash 算法-关注优化细节

//给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 // // 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 // // // // 示例 1&#xff1a; // // //输入&#xff1a;nums [100,4…...

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入…...

Idea设置代理后无法clone git项目

背景 对于我们程序员来说&#xff0c;经常上github找项目、找资料是必不可少的&#xff0c;但是一些原因&#xff0c;我们访问的时候速度特别的慢&#xff0c;需要有个代理&#xff0c;才能正常的访问。 今天碰到个问题&#xff0c;使用idea工具 clone项目&#xff0c;速度特…...

IPFS去中心化存储实战指南:黑马程序员音乐播放器项目开发完整教程

IPFS去中心化存储实战指南&#xff1a;黑马程序员音乐播放器项目开发完整教程 【免费下载链接】BlockChain 黑马程序员 120天全栈区块链开发 开源教程 项目地址: https://gitcode.com/gh_mirrors/blockchain95/BlockChain 你是否想过如何构建一个真正去中心化的音乐播放…...

2026年HR招聘偏好白皮书:这5项附加技能出现频率暴涨

2026 年的招聘市场&#xff0c;正在从“看你会什么岗位技能”&#xff0c;转向“看你能不能把岗位做得更智能”。HR筛简历时&#xff0c;越来越关注候选人的AI应用能力、数据化思维和业务落地能力。人社部近年发布的新职业中&#xff0c;已经出现生成式人工智能系统应用员、人工…...

潮州东方轻奢风全屋高定找哪家

开篇引言根据《2026年中国全屋定制行业发展报告》&#xff0c;潮州市全屋定制市场规模同比增长38%&#xff0c;其中全屋高端定制细分市场同比增长52%。目前&#xff0c;潮州市家庭全屋定制需求占比72%&#xff0c;高端定制需求占比45%。为了帮助潮州市消费者选择合规、靠谱、差…...

华硕笔记本终极性能控制指南:用G-Helper完全替代Armoury Crate

华硕笔记本终极性能控制指南&#xff1a;用G-Helper完全替代Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zen…...

FeHelper前端助手:30+开发工具集,让你的浏览器变身效率神器

FeHelper前端助手&#xff1a;30开发工具集&#xff0c;让你的浏览器变身效率神器 【免费下载链接】FeHelper &#x1f60d;FeHelper--Web前端助手&#xff08;Awesome&#xff01;Chrome & Firefox & MS-Edge Extension, All in one Toolbox!&#xff09; 项目地址:…...

Sangfor文件夹可以删除吗?【图文讲解】深信服文件夹残留清理?如何彻底删除深信服?Sangfor文件夹是什么?

&#xff08;1&#xff09;问题背景打开C盘&#xff0c;突然冒出个Sangfor 文件夹&#xff0c;占用好几个 GB 空间&#xff0c;想删又不敢删&#xff0c;怕删坏系统、断网崩溃&#xff1b;上网一查&#xff0c;说法五花八门&#xff0c;有人说是病毒&#xff0c;有人说是办公软…...

基于PIC32的嵌入式MIDI合成器:从波表合成到硬件实现

1. 项目概述&#xff1a;一个基于嵌入式微控制器的MIDI声音合成器如果你对电子音乐制作、嵌入式开发&#xff0c;或者DIY硬件合成器感兴趣&#xff0c;那么“REMI Synth”这个项目绝对值得你花时间深入了解。它本质上是一个数字单音MIDI控制的声音合成器&#xff0c;核心是一块…...

如何用HsMod解锁炉石传说60+项隐藏功能:终极优化指南

如何用HsMod解锁炉石传说60项隐藏功能&#xff1a;终极优化指南 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx开发的炉石传说功能增强插件&#xff0c;为玩家提供…...

三步让小爱音箱秒变AI语音助手:MiGPT深度配置指南

三步让小爱音箱秒变AI语音助手&#xff1a;MiGPT深度配置指南 【免费下载链接】mi-gpt &#x1f3e0; 将小爱音箱接入 ChatGPT 和豆包&#xff0c;改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 还在为小爱音箱的"人工智障&q…...

Claude Agent SDK 从 0 到 1 快速上手教程

Claude Agent SDK 从 0 到 1 快速上手教程 什么是 Claude Agent SDK? Claude Agent SDK 是 Anthropic 官方推出的用于构建 AI 智能体的开发工具包。它基于 Claude Code 构建,让开发者能够以编程方式创建、扩展和定制由 Claude 驱动的应用程序。与简单的聊天机器人不同,基于…...