C++基础算法③——排序算法(选择、冒泡附完整代码)

news/2024/4/27 2:13:12/文章来源:https://blog.csdn.net/weixin_44775255/article/details/129685211

排序算法

1、选择排序

2、冒泡排序


1、选择排序


基本思想:从头至尾扫描序列,每一趟从待排序元素中找出最小(最大)的一个元素值,然后与第一个元素交换值,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。

原始序列:45 32 65 98 5 42 11 61

  • ① 从序列中取出最小的元素5,将5同序列第一个元素交换,此时产生仅含一个元素的有序序列, 原序列减长度减1;
  • 结果:5 [11 32 42 45 65 98]
  • ② 从原序列中取出最小的元素11,将11同序列第一个元素交换,此时产生仅两个元素的有序序列,原序列减长度减1;
  • 结果:5 11 [32 42 45 65 98]
  • 同理重复同样的步骤:
  • 结果:5 11 32 [42 45 65 98]
  • 结果:5 11 32 42 [45 65 98]
  • 结果:5 11 32 42 45 [65 98]
  • 结果:5 11 32 42 45 65 [98]
  • 最后一个元素肯定是最大元素,排序直接生产一个有序的序列;
  • 最终结果:5 11 32 42 45 65 98

编程步骤:

  1. 定义数组,并输入值存到数组;
  2. 在原无序序列中,找到第一个最小值与该索引;
  3. 然后最小值的索引与原来不一致,就交换值;
  4. 重复②③步骤;
  5. 最后输出结果。
//1.选择排序算法
#include<iostream>
using namespace std;
int a[1000];
int main(){int n,min,index;cin>>n;for(int i=0;i<n;i++){ //1.输入值到数组 cin>>a[i];}for(int i=0;i<n;i++){ min = a[i]; // 假设第一个为最小值 index = i; // 锁定最小值索引 for(int j=i+1;j<n;j++){ //逐个跟后面比对if(min>a[j]){ // 大于最小值,则更新值 min = a[j]; //更新值 index = j;  //更新索引 }}if(i!=index){ // 当索引不一致,代表最小值变了 swap(a[i],a[index]); //那就交换第一个值与最小值的位置。 } }for(int i=0;i<n;i++){ //输出结果。 cout<<a[i]<<" ";}return 0;
} 

  1.  稳定性:待排序序列中如果存在与原来两端元素相等的元素,稳定性就可能被破坏。如[2,4,2,1,3],在排序完后,[1,2,2,3,4] 的a[2]与原来的a[2] 不一致,稳定性就被破坏了,所以选择排序是一种不稳定的排序算法
  2. 时间复杂度:选择排序的时间复杂度为O(n^{2})。
  3. 适用场景:待排序序列中,元素个数较少时。
     

2、冒泡排序

基本思想:相邻的元素两两比较,较大的数下沉(排后面),较小的数冒起来(排前面),这样一趟比较下来,最大(小)值就会排列在末端。整个过程如同气泡冒起,因此被称作冒泡排序。

原始序列:45 32 65 98 5 42 11 61

  • ① 从前往后比,根据相邻两个数比较,大的在后小的在前;
  • 第一趟排序:32 45 65 5 42 11 61 98;可以看到最大的数冒到最后面了。
  • 接着,排序比较次数可以少一次,因为有一个排好了;
  • 对无序:32 45 65 5 42 11 61 进行冒泡排序
  • 第二趟排序:32 45 5 42 11 61 65 98;
  • 第三趟排序:32 5 42 11 45 61 65 98;
  • 第四趟排序:5 32 11 42 45 61 65 98;
  • 第五趟排序:5 11 32 42 45 61 65 98;
  • 第六趟排序:5 11 32 42 45 61 65 98; 
  • 发现第六趟排序没有改变,就结束循环,排序结束!

编程步骤:

  1. 定义数组,并输入值存到数组;
  2. 比较相邻两个值,如果前比后大,就将两个值交换。
  3. 从第1个依次到最后1个,这一趟就排序完成。
  4. 重复②③步骤;直到比较没有再改变数值,就循环结束。
  5. 最后输出结果。
//2.冒泡排序 
#include<iostream>
using namespace std;
int a[1000];
int main(){int n;cin>>n;for(int i=0;i<n;i++){ //1.输入值到数组 cin>>a[i];}for(int i=n-1;i>0;i--){bool flag = true; //假设排好 for(int j=0;j<i;j++){if(a[j]>a[j+1]){ //比较相邻的值 swap(a[j],a[j+1]); //交换 flag = false; }}if(flag==true) break; //某一轮排好,没有交换,提前终止。 }for(int i=0;i<n;i++){ //输出结果 cout<<a[i]<<" ";}return 0;
}

  1. 稳定性:在冒泡排序中,遇到相等的值,是不进行交换的,只有遇到不相等的值才进行交换,所以是稳定的排序方式。
  2. 时间复杂度:选择排序的时间复杂度为O(n^{2})。
  3. 适用场景:冒泡排序适用于数据量很小的排序场景,因为冒泡的实现方式较为简单。

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

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

相关文章

Redis(十四)【Redisson分布式锁基础介绍】

分布式锁 Redisson 一、Redisson 概述 什么是 Redisson Redisson 是一个在 Redis 的基础上实现的 Java 驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。它不仅提供了一系列的分布式的Java常用对象&#xff0c;还提供了许多分布式服务。 Redisson 的宗旨是促进使…

【数据分析之道①】字符串

文章目录专栏导读1、字符串介绍2、访问字符串中的值3、字符串拼接4、转义字符5、字符串运算符6、字符串格式化7、字符串内置函数专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Python领域新星创作者&#xff0c;专注于分享python领域知识。 ✍ 本文录入于《数据分析之…

SpringCloud:初识RabbitMQ及快速入门

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;但…

每个开发人员都需要掌握的10 个基本 SQL 命令

SQL 是一种非常常见但功能强大的工具&#xff0c;它可以帮助从任何数据库中提取、转换和加载数据。数据查询的本质在于SQL。随着公司和组织发现自己处理的数据量迅速增加&#xff0c;开发人员越来越需要有效地使用数据库来处理这些数据。所以想要暗恋数据领域&#xff0c;SQL是…

数据挖掘(作业汇总)

目录 环境配置 实验1 数据 作业2 环境配置 实验开始前先配置环境 以实验室2023安装的版本为例&#xff1a; 1、安装anaconda&#xff1a;&#xff08;anaconda自带Python,安装了anaconda就不用再安装Python了&#xff09; 下载并安装 Anaconda3-2022.10-Windows-x86_64.ex…

分片压缩、分片上传,融云 IM 视频文件高速传输方案

在 IM 消息管理中&#xff0c;多种类型消息的传输处理是服务可靠性的关键。关注【融云全球互联网通信云】了解更多 通常&#xff0c;发送消息前&#xff0c;融云 IM 会将发送的媒体文件上传到默认文件服务器。 而在文本、表情、图片、语音、位置、小视频等各种消息中&#xf…

unity+vs code+mac环境安装配置

参考资料&#xff1a;unity官方文档&#xff1a;https://docs.unity3d.com/cn/current/Manual/ScriptingToolsIDEs.html安装unity1、打开unity中国官网下载&#xff0c;https://unity.cn/releases#undefined2、安装成功后&#xff0c;登录帐号。3、安装unity 推荐版本mac 配置C…

Matlab中对三维图进行视角观察设置——相机视线函数view

Matlab中对三维图进行视角观察设置——相机视线函数view1.view函数的功能&#xff1a;相机视线&#xff1b;2.view函数的调用语法&#xff1a;当我们采用matlab中的surf函数等绘制好三维图像后&#xff0c;想观察某个角度的图像时&#xff0c;可采用view函数快速多角度便捷设置…

Hive数据仓库简介

文章目录Hive数据仓库简介一、数据仓库简介1. 什么是数据仓库2. 数据仓库的结构2.1 数据源2.2 数据存储与管理2.3 OLAP服务器2.4 前端工具3. 数据仓库的数据模型3.1 星状模型3.2 雪花模型二、Hive简介1. 什么是Hive2. Hive的发展历程3. Hive的本质4. Hive的优缺点4.1 优点4.2 缺…

8个python自动化脚本提高打工人幸福感~比心~

人生苦短&#xff0c;我用Python 最近有许多打工人都找我说打工好难 每天都是执行许多重复的任务&#xff0c; 例如阅读新闻、发邮件、查看天气、打开书签、清理文件夹等等&#xff0c; 使用自动化脚本&#xff0c;就无需手动一次又一次地完成这些任务&#xff0c; 非常方便…

2023北京/杭州/湖南/广东CDGA/CDGP数据治理工程师认证报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

《Spring Boot 趣味实战课》读书笔记(四)

你有 REST Style 吗 你应该懂一点 HTTP HTTP 就是 HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写。 它是一种关于“传输”的协议&#xff0c;既然是传输&#xff0c;那么至少要在两个对象之间进行&#xff0c;在 HTTP 中对应的就是客户端和服务端…

KCon 2023兵器谱招募开启!以「兵器」会友,热血相聚!

2023第十二届 KCon大会已启动&#xff0c;议题招募正在火热进行中。&#xff08;点击查看&#xff09;与此同时&#xff0c;兵器谱召集也正式开启&#xff01;我们现诚邀众安全研究员踊跃展示「神兵利器」&#xff0c;以「兵器」会友&#xff0c;逐鹿网络江湖。 「器」既为容纳…

联合体在内存中的分布情况,大小端的判断方法

一、联合体的定义 联合是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间&#xff0c;所以联合体也叫共用体。 //联合类型的声明 union Un { char c; int i; }; int main() { //联合变量的定义 union U…

项目二 任务三 训练5 交换机的HSRP技术

在“项目二 任务三 训练4 交换机的DHCP技术”基础上继续完成下列操作&#xff1a; 1、二层交换机50-2的配置 50-2>en 50-2#conf t Enter configuration commands, one per line. End with CNTL/Z. 50-2(config)#int 50-2(config)#interface g 50-2(config)#interface gigab…

什么是队列,如何实现?

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; “海色温柔&#xff0c;波浪缓慢&#xff0c;似乎在静静期待着新的一天。” 前言&#xff1a; 上期我们讲了栈&#xff0c;它的特点是“后入先出”。这次我们再来学习一个新的数据结构&#xff1a;队列&…

索尼mp4变成rsv的修复方法

索尼的摄像机在一些极端情况下(如断电)会生成RSV文件&#xff0c;遇到这种情况我们应该如何处理&#xff1f;下面来看看今天这个案例。故障文件:22.4G RSV文件故障现象:断电后仅生成了一个扩展名为rsv的文件&#xff0c;无法播放。故障分析:经过长时间处理索尼的摄像机&#xf…

WSO2 Apim Message Mediation (Api Policies)

WSO2 Apim Message Mediation 1. 版本区别2. 客制化2.1 Wso2 Integration Studio Install2.2 New Sequence2.3 测试

Element table组件内容\n换行解决办法

项目使用<el-table>组件 <el-table :data"warnings" :row-class-name"highlightRow" v-loading"isLoading"> <el-table-column label"ID" prop"id"/> <el-table-column label"时间" pro…

VS2022 webapi SQLite EFcore 最简单部署

一、我有一个sqlite单文件数据库&#xff0c;里面有一张表material&#xff0c;我想把这张表的数据&#xff0c;让c# webapi程序从服务器上输出成json,让客户端可以查询到数据。二、使用VS2022&#xff0c;安装ASP.net相关开发组件。三、VS2022中新建一个项目&#xff0c;项目的…