【C语言/数据结构】排序(选择排序,推排序,冒泡排序)

 🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343
🔥 系列专栏:《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm=1001.2014.3001.5482

9efbcbc3d25747719da38c01b3fa9b4f.gif​​​​

目录

选择排序

选择排序

​编辑 

 代码呈现

堆排序

代码呈现

交换排序

冒泡排序


前言

    💬 hello! 各位铁子们大家好哇。

             今日更新了选择,堆,冒泡排序的内容
    🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝

 

选择排序

选择排序

过程图如下: 

 代码呈现

//时间复杂度:O(N^2)
//最好情况下:O(N^2)
void SelectSort(int* a, int n)
{int begin = 0, end = n - 1;while (begin < end){int mini = begin, maxi = begin;for (int i = begin + 1; i <= end; i++){if (a[i] < a[mini]){mini = i;}if (a[i] > a[maxi]){maxi = i;}}Swap(&a[begin], &a[mini]);//当max在begin的位置时if (maxi == begin){maxi = mini;}Swap(&a[end], &a[maxi]);begin++;end--;}
}

分析:开始时,begin指向首元素,end是末尾元素下标。这里的选择排序与上图过程略有差异,这里的选择排序每次选出最大和最小值,分别与头和尾交换。然后begin++和end--来缩小选择的范围。需注意,在同时选最大和最小时,要判断max是否在begin的位置上,如果是,就要把maxi改为mini的值。

堆排序

代码呈现

void AdjustDown(int* a, int size, int parent)
{int child = parent * 2 + 1;while (child < size){//假设左孩子小,如果假设错了,就更新一下if (child + 1 < size && a[child + 1] > a[child]){child++;}if (a[child] > a[parent]){Swap(&a[child], &a[parent]);parent = child;child = parent * 2 + 1;}else{break;}}
}//升序
void HeapSort(int* a, int n)
{//建大堆//O(N)for (int i = (n - 1 - 1) / 2; i >= 0; i--){AdjustDown(a, n, i);}//O(N*logN)int end = n - 1;while (end > 0){Swap(&a[0], &a[end]);AdjustDown(a, end, 0);end--;}
}

堆排序在前面的文章中已经讲解,这里不再介绍。

交换排序

冒泡排序

//时间复杂度:O(N^2)
//最好情况:O(N);
void BubbleSort(int* a, int n)
{for (int j = 0; j < n; j++){bool exchange = false;for (int i = 1; i < n-j; i++){if (a[i - 1] > a[i]){Swap(&a[i - 1], &a[i]);exchange = true;}}if (exchange == false)break;}
}

 分析:这里简单说下时间复杂度最好情况:O(N)。在第一次外层for循环时,如果内层循环结束后,exchange的值还是false,就说明已经是排序好了的,就可以break掉循环,这时就遍历了一次,时间复杂度就是O(N)。

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

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

相关文章

JAVA学习笔记6(常用结构与数组)

1.选择结构 1.if语句&#xff1a; if(条件表达式){ 一条或多条语句 }; 2.if else语句&#xff1a; if(条件表达式) {语句块1} else {语句块2} 3.switch语句&#xff1a; switch(表达式){​​​​​​​ case 常量表达式1:语句组;break;​​​​​​​ ​​​​…

js实现动漫拼图2.0版

比较与1.0版&#xff0c;2.0版就更像与华容道类似的拼图游戏&#xff0c;从头到尾都只能控制白色块移动&#xff0c;而且打乱拼图和求助的实现与1.0都不相同 文章目录 1 实现效果2 实现思路2.1 打乱拼图2.2 求助功能2.3 判赢 3 代码实现 js实现动漫拼图1.0版 https://blog.csdn…

【工作技术栈】基于注解的redis分布式锁(支持SPEL细粒度+redisson可重入功能)

这里写目录标题 前言基于注解的reids分布式锁感悟 前言 刚开始我们使用的redis工具是自己写的&#xff0c;因为觉得redisson没必要&#xff08;其实是没有人想因为自己不懂redisson导致线上问题吧。。。毕竟公共组件&#xff09; 这个就是目前我们用的&#xff0c;手写简易lua…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-菜单管理实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

cmake-find_package链接第三方库

文章目录 基本调用形式和模块模式使用方式 之前我们是使用了绝对路径来链接OpenCV第三方库&#xff0c;但是现在很多库一般会自己写一些cmake文件提供给用户&#xff0c;用户可以直接使用其中的内置变量即可。使用的命令就是find_package。 基本调用形式和模块模式 find_packa…

【RTP】webrtc 学习2: webrtc对h264的rtp打包

切片只是拷贝帧的split的各个部分到新的rtp 包的封装中。并没有在rtp包本身标记是否为关键帧FU-A 切片 输入的H.264 数据进行split :SplitNalu SplitNalu : 按照最大1200字节进行切分 切分后会返回一个数组 对于FU-A :split的数据总大小是 去掉一个字节的nalu header size …

CROSS JOIN

CROSS JOIN 是 SQL 中用于执行笛卡尔积&#xff08;Cartesian product&#xff09;的一种连接操作。它会将左表的每一行与右表的每一行进行组合&#xff0c;生成的结果集的行数等于左表的行数乘以右表的行数。 举个例子&#xff0c;如果表 A 有 m 行&#xff0c;表 B 有 n 行&…

qt的main函数(程序启动入口)

函数入口的参数 这就是Qt中最简单的一个main函数&#xff1a; int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 其中int argc, char *argv[]参数是很有用的。 使用.\release\程序名.exe 模型名.model 模型文件所在的地…

实战 | OpenCV+OCR实现弧形文字识别实例(详细步骤 + 源码)

导 读 本文主要介绍基于OpenCV+OCR实现弧形文字识别实例,并给详细步骤和代码。源码在文末。 背景介绍 测试图如下,目标是正确识别图中的字符。图片来源: https://www.51halcon.com/forum.php?mod=viewthread&tid=6712 同样,论坛中已经给出了Halcon实现代码,…

1948-2022年金融许可信息明细数据

1948-2022年金融许可信息明细数据 1、时间&#xff1a;1948-2022年 2、来源&#xff1a;银监会&#xff08;银监会许可证发布系统&#xff09; 3、指标&#xff1a;来源表、机构编码、机构名称、所属银行、机构类型、业务范围、机构住所、地理坐标、行政区划代码、所属区县、…

【计算机网络】深入掌握计算机网络的核心要点(面试专用)

写在前面 前言四层模型网络地址管理Linux下设置ipARP请求包总结 前言 计算机网络是指将分散的计算机设备通过通信线路连接起来&#xff0c;形成一个统一的网络。为了使得各个计算机之间能够相互通信&#xff0c;需要遵循一定的协议和规范。OSI参考模型和TCP/IP参考模型是计算机…

(南京观海微电子)——OLED驱动与调试

一、OLED DDIC分类 OLED DDIC的技术方向可以分为3类&#xff1a;带Ram【内存】的IC、Ram-less IC和TDDI【显示&触控集成的IC】 1、带Ram的OLED DDIC OLED DDIC有两个Ram&#xff0c;分别是Demura Ram和Display Ram。 1、带Ram的OLED DDIC 1-1&#xff09;Demura Ram&a…

STM32 简易智能家居嵌入式系统设计蓝图

声明 本文为物联网产品设计蓝图,不包括程序设计。 文章目录 声明前言一、项目需求1. 1 数据采集1.2 执行器控制1.3 人机交互1.4 功能1.5 场景联动1.6 数据分析二、项目评估2.1 软硬件2.1.1 硬件2.1.2 软件2.2 设备通讯方式及网络协议三、技术预研3.1 MQTT平台评估3.1.1 方案一…

一张图文深入了解信息量概念

通信原理第10页最后一段&#xff1a; 概率论告诉我们&#xff0c;事件的不确定程度可以用其出现的概率来描述。因此&#xff0c;消息中包含的信息量与消息发生的概率密切相关。消息出现的概率越小&#xff0c;则消息中包含的信息量就越大。 这句话怎么理解呢&#xff1f; 比如…

安利6款免费又高清的视频转GIF方法,值得收藏

前言 平时我们在聊天的时候会发的很多有趣表情包&#xff0c;其实有些就是视频里面的画面&#xff0c;觉得好玩有趣就被网友转换成了GIF&#xff0c;聊天的时候就可以用这些表情包来代表当时的心情。 如何将视频转成GIF动图&#xff1f;对于还不知道怎么将视频转成GIF的朋友&a…

【C语言】(8)宏定义

1. 简介 宏定义(#define)是C语言预处理指令的一种&#xff0c;用于为程序中的值或代码片段创建别名。宏定义可以使代码更加简洁、易于维护&#xff0c;并且可以提高代码重用性。 2. 基本用法 定义常量 宏可以用来定义常量&#xff0c;代替硬编码的数字或字符串&#xff0c;…

MyBatis --- 常用注解

目录 前言 1. Mapper 2. Select 3. Insert 4. Update 5. Delete 6. Results 注意事项&#xff1a; 前言 MyBatis是一款强大的持久层框架&#xff0c;通过注解的方式&#xff0c;可以更便捷地进行数据库操作。本文将介绍MyBatis中常用的注解以及在使用这些注解时需要注意…

uniapp微信小程序-秋云u-charts层级过高

一、先说问题 想在这个每个圆环上面定位一些百分比或者定位一些东西,微信小程序端可以&#xff0c;真机调试不行&#xff0c;打算提高层级不行 二、解决 点击底下开启2d就可以&#xff0c; 也就是在你的图表上加上 :canvas2d"true"

Vue 插槽讲解

什么是插槽&#xff1f; Slot 通俗的理解就是“占坑”&#xff0c;在组件模板中占好了位置&#xff0c;当使用该组件标签时候&#xff0c;组件标签里面的内容就会自动填坑&#xff08;替换组件模板中slot位置&#xff09;并且可以作为承载分发内容的出口。 简单的来说为了更加…

Adobe ColdFusion 任意文件读取漏洞复现(CVE-2023-26361)

0x01 产品简介 Adobe ColdFusion是美国奥多比(Adobe)公司的一套快速应用程序开发平台。该平台包括集成开发环境和脚本语言。 0x02 漏洞概述 Adobe ColdFusion平台 filemanager.cfc接口存在任意文件读取漏洞,攻击者可通过该漏洞读取系统重要文件(如数据库配置文件、系统配…