图解基础排序算法(冒泡、插入、选择)(山东大学实验二)

 

目录

⚽前言:

🏐 冒泡排序:

设定:

分类:

起源:

图解冒泡:

图中绿色:

图中橙色:

整体思路:

交换思路:

核心代码: 

🏀 图解插入:

设定:

插入思路:

整体思路:

核心代码:

🥎图解选择: 

设定:

整体思路:

核心代码: 

🎱山东大学实验二完整代码: 


前言:

冒泡、插入、选择排序的都是最基础的排序算法。其时间复杂度、空间复杂度都较高,但是学起来相对容易,非常适合新手入门学习。并且里面所蕴含的思想也是非常深刻,值得我们细细体味!下面就让我们逐个进入吧。

 冒泡排序:

设定:

首先不妨设定我们需要实现的是从小到大的排序

分类:

冒泡分为两种:一、前向后  二、后向前。

起源:

让我们先来想想水中的气泡是如何从水底浮上来的。是不是从最底下然后逐渐慢慢的向上浮动,直到最终露出水面。那如果有很多气泡呢?那是不是肯定是最轻的气泡先浮上来,然后最重的气泡排在后面再浮上来。这个生活常识就是我们冒泡排序的起源。

图解冒泡:

图中绿色:

在一次次变动的就是每一趟下的冒泡子排序,其目的是为了选出目前待排序的数中最大的一个。

图中橙色:

是每一轮冒泡子排序下得到的最大结果。

整体思路:

不难发现每一轮子排序我们都将得到一个待排序中的最大数。也就是说第一轮得到所有数中的最大值。然后第二轮得到所有数中的次大值(因为此时最大值不参与排序),第三轮得到第三大值。如此循环n-1次,最后完成排序。

交换思路:

每次选择两个数,前面的与后面的比较,若前面大后面小则两者交换。第一次选择1、2数,第二次选择2、3数,第三次选择3、4数,如此重复。如图中的绿色不停比较交换所体现的

核心代码: 

        cout<<"Bubble Sort"<<endl;for(int i=0;i<num;i++){for(int j=num-1;j>i;j--){if(a[j]<a[j-1])swap(a[j],a[j-1]);}}for(int i=0;i<num-1;i++){cout<<a[i]<<',';}cout<<a[num-1]<<endl;

时间复杂度:最坏情况:O(N^2)
      最好情况:O(N)
空间复杂度:O(1)

 插入排序:

设定:

首先不妨设定我们需要实现的是从小到大的排序

插入思路:

假如我们有一个有序的序列,现在要将一个数插入这个序列中要求序列仍然有序。那么我们就要从第一个数开始和待插入数进行比较,如果第一个数小于待插入数,说明这个数可能还要插入到后面。于是我们再看第二个数和插入数的大小关系,重复上面的操作。直到我们遇到一个数大于待插入数,那么此时待插入数必然是插入在这个数的前一个,于是我们实现插入。

整体思路:

整体思路就是进行多次前面提到的插入过程。

橙色:已经有序的序列

绿色:待插入有序序列的数 

蓝色:本轮未轮到插入的序列,后续需要插入 

再来个动图:

核心代码:

        cout<<"Insert Sort"<<endl;int res[19]={0};for(int i=0;i<num;i++){int j=0;for(j=i-1;j>=0;j--){if(a[i]<res[j])res[j+1]=res[j];elsebreak;}res[j+1]=a[i];}for(int i=0;i<num-1;i++){cout<<res[i]<<',';}cout<<res[num-1]<<endl;

选择排序: 

设定:

首先不妨设定我们需要实现的是从小到大的排序

整体思路:


每次从待排序列中选出一个最小值,然后放在序列的起始位置,直到全部待排数据排完即可。
实际上,我们可以一趟选出两个值,一个最大值一个最小值,然后将其放在序列开头和末尾,这样可以使选择排序的效率快一倍。

橙色:已经完成的有序的序列

红色:不停在找待排序序列中最小的,找到后就和最前面的蓝色的数进行交换

核心代码: 

        cout<<"Select Sort"<<endl;int res[19]={0};int x=0;for(int i=0;i<num;i++){int min=INT_MAX;int pos=0;for(int j=0;j<num;j++){if(min>a[j]){min=a[j];pos=j;}}a[pos]=INT_MAX;res[x++]=min;}for(int i=0;i<num-1;i++){cout<<res[i]<<',';}cout<<res[num-1]<<endl;

山东大学实验二完整代码: 

#include<iostream>
using namespace std;void multiSelect(int a[],int sel,int num){switch (sel){case 1:{cout<<"Bubble Sort"<<endl;for(int i=0;i<num;i++){for(int j=num-1;j>i;j--){if(a[j]<a[j-1])swap(a[j],a[j-1]);}}for(int i=0;i<num-1;i++){cout<<a[i]<<',';}cout<<a[num-1]<<endl;break;}case 2:{cout<<"Insert Sort"<<endl;int res[19]={0};for(int i=0;i<num;i++){int j=0;for(j=i-1;j>=0;j--){if(a[i]<res[j])res[j+1]=res[j];elsebreak;}res[j+1]=a[i];}for(int i=0;i<num-1;i++){cout<<res[i]<<',';}cout<<res[num-1]<<endl;break;}case 3:{cout<<"Select Sort"<<endl;int res[19]={0};int x=0;for(int i=0;i<num;i++){int min=INT_MAX;int pos=0;for(int j=0;j<num;j++){if(min>a[j]){min=a[j];pos=j;}}a[pos]=INT_MAX;res[x++]=min;}for(int i=0;i<num-1;i++){cout<<res[i]<<',';}cout<<res[num-1]<<endl;break;}default:break;}
}int main(){cout<<"Input"<<endl;int a[19]={0};int num=0;for(int i=0;i<18;i++){int t=0;cin>>t;if(t==0)break;else{a[i]=t;num++;}}cout<<"1-Bubble Sort,2-Insert Sort,3-Select Sort"<<endl;int sel=0;cin>>sel;cout<<"Output"<<endl;multiSelect(a,sel,num);cout<<"End"<<endl;
}

最后求点赞啦: 

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

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

相关文章

竹永康在科锐待岗第3天工作总结

今日研读了《高性能MySQL》一书中的第 7.10 章节&#xff1a;MySQL高级特性之全文索引&#xff0c;从中学习到了一些专业技能知识。总结如下。 文章目录 全文索引MyISAM全文索引自然语言的全文索引布尔全文索引全文索引的限制和替代方案全文索引的配置和优化 全文索引 全文索…

玻尔兹曼常数

参考&#xff1a; https://vibaike.com/216369/ 萨尔茨曼常数&#xff08;kB 或 k&#xff09;是将气体中粒子的平均相对动能与气体的热力学温度相关联的比例因子。 它出现在开尔文和气体常数的定义中&#xff0c;出现在普朗克黑体辐射定律和玻尔兹曼熵公式中&#xff0c;并用…

3D视觉专用名词概念解释,深度图、点云图、IR图、RGB图像

&#x1f31e;欢迎来到深度学习的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f64f;作者水平很有限&#xff0c;如果发现错误&#xff…

【PyTorch】PyTorch之Tensors属性篇

文章目录 前言一、Tensors1、is_tensor2、is_storage3、is_complex4、is_conj5、is_floating_point6、is_nonzero7、set_default_dtype8、get_default_dtype9、set_default_device10、set_default_tensor_type11、torch.numel12、set_printoptions13、set_flush_denormal 前言 …

JAVA电商平台 免 费 搭 建 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城

涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

Debian系统写Mysql时中文出现乱码无法定入的问题解决方案

原因是操作系统可能精简安装&#xff0c;没有GBK字符集&#xff0c;只有UTF8在转换或使用的时候有问题。 使用locale -a查看系统支持的字符集。正常的比较全的字符集的操作系统如下&#xff1a; 有问题的操作系统字符集如下&#xff1a; 解决方案&#xff1a; 步骤1&#…

智能小车(八)ros实现将智能小车数据通过TCP/IP发送到上位机网关

ros实现将智能小车数据通过TCP/IP发送到上位机网关 这里主要注意: 将浮点型数据*1000转换成int型数据然后分字节储存&#xff08;另取一个字节作为符号位&#xff09;。没有用struct.pack进行字节流打包&#xff0c;原因是不同平台&#xff0c;字节流的打包浮点型数据不一样&am…

力扣(leetcode)第830题较大分组的位置(Python)

830.较大分组的位置 题目链接&#xff1a;830.较大分组的位置 在一个由小写字母构成的字符串 s 中&#xff0c;包含由一些连续的相同字符所构成的分组。 例如&#xff0c;在字符串 s “abbxxxxzyy” 中&#xff0c;就含有 “a”, “bb”, “xxxx”, “z” 和 “yy” 这样的…

C++ //练习 2.11 指出下面的语句是声明还是定义:

C Primer&#xff08;第5版&#xff09; 练习 2.11 练习 2.11 指出下面的语句是声明还是定义&#xff1a; ( a ) extern int ix 1024; ( b ) int iy; ( c ) extern int iz; 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 解释 ( …

time-to-event数据的参考资料

目录 一、书籍推荐 二、方法论文章 Introductory/Overview Articles Censoring Non-parametric survival methods Semi-parametric survival methods Parametric survival methods Time-Varying Covariates Competing risk analysis Analysis of clustered data and fra…

基于Java+SSM框架的智慧医疗问诊管理系统【附源码】

基于JavaSSM框架的智慧医疗问诊管理系统详细设计和实现【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各…

高效视频剪辑:视频合并让视频焕然一新,添加背景音乐更动听

随着社交媒体和数字内容的普及&#xff0c;视频剪辑已成为一项常用的技能。除了基本的剪辑技巧外&#xff0c;添加合适的背景音乐也是提升视频质量的方法。下面来看云炫AI智剪的高效视频剪辑技巧——如何批量合并视频&#xff0c;添加动听的背景音乐。 视频合并后的效果展示&a…

Interface 接口

/* * 语法1&#xff1a;使用interface关键字定义 * 语法2&#xff1a;接口中&#xff0c;允许定义“抽象方法”&#xff0c;public 和 abstract关键字可以省略 * 语法3&#xff1a;接口中&#xff0c;允许定义“默认方法” * 语法4&#xff1a;实现类通过implements关键字实现接…

What is `@Repository` does?

Repository 是Spring注解&#xff0c;标识数据访问层组件&#xff08;DAO, Data Access Object&#xff09; 当一个类被标记为 Repository 时&#xff1a; 1、组件扫描与自动代理&#xff1a; Spring通过组件扫描&#xff08;Component Scan&#xff09;机制发现带有 Reposit…

编程语言的比较—c语言,c++与java,c#的比较

c语言是历史悠久的语言&#xff0c;不仅可以开发应用程序&#xff0c;还可以用来编写操作系统。如果对接近硬件的部分进行操作&#xff0c;c语言是不二之选。 c语言是c语言中增加面向对象功能的编程语言。通常情况下&#xff0c;c可以编译c语言编写的代码。c广泛应用于微型计算…

【AI绘画+本地部署】基于krita的AI绘画(含windows一键整合包)

comfyuikrita所有相关资源整合包(无需下载后面链接)百度网盘&#xff1a;https://pan.baidu.com/s/1iwNRpdTaD26YbzSDm6WLDA?pwdbur8 –来自百度网盘超级会员V4的分享 krita绘画软件官网地址 https://krita.org/en/download/krita-desktop/ krita-ai-diffusion 插件&#xff…

数据库:园林题库软件(《城市绿地系统规划》答题卷四)

《城市绿地系统规划》答题卷四 填空题 1、生产绿地是指为城市绿化提供苗木、花草、种子的苗圃、草圃等圃地&#xff0c;是为城市绿化服务的生产、科研实验绿地。 园林苗圃的规模按照其用地面积来划分&#xff0c;可分为大型苗圃、中型苗圃、小型苗圃三类。 2、防护绿地是出…

P1451 求细胞数量——深搜、广搜

求细胞数量 题目描述 一矩形阵列由数字 0 0 0 到 9 9 9 组成&#xff0c;数字 1 1 1 到 9 9 9 代表细胞&#xff0c;细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞&#xff0c;求给定矩形阵列的细胞个数。 输入格式 第一行两个整数代表矩阵大小 n n n 和…

计算机网络-ACL访问控制列表

上一篇介绍NAT时候就看到了ACL这个东西了&#xff0c;这个是什么意思&#xff1f;有什么作用呢&#xff1f; 一、ACL访问控制列表 访问控制列表 (ACL, Access Control List)是由一系列permit或deny语句组成的、有序规则的列表。ACL是一个匹配工具&#xff0c;能够对报文进行匹配…

鸿蒙原生应用/元服务实战-AGC团队账户

多人及内外结合去开发运营鸿蒙原生应用元服务时&#xff0c;需要用到团队账户&#xff0c;AGC提供了强大的团队角色与权限分工能力。 团队帐号是开发者联盟为实名开发者提供的多个成员帐号登录与权限管理服务。当前团队帐号支持成员参与应用市场&#xff08;付费推广、应用内付…