C++基础算法教程|数据排序(3)

【C++】排序算法 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序、快速排序、计数排序、基数排序、桶排序、外排序 阅读详情

欢迎来到沾花把玖的C++算法课堂!

数据排序——冒泡排序

1.基本思想:

以n个人站队为例,从第1个开始,依次比较相邻的两个是否逆序对(高在前,矮在后),若逆序就交换这两人,即第1个和第2个比,若逆序就交换这两人,即第2个和第3个比,若逆序就交换这两人,即第3个和第4个比,......,直到n-1和n比较,经过一轮比较后,则把最高的人排到最后,即将最高的人像冒泡一样逐步冒到相应的位置。原n个人的排序问题,转换为n-1个人的排序问题。第二轮比较以此类推,直到进行n-1轮比较后,队列为有序队列。

2.动图演示:

在这里插入图片描述

3.代码:

void BubbleSort(int *a,int n){
	int end=0;
	for (end=n-1;end>=0;end--){
		int exchange=0;     //记录该趟冒泡排序是否进行过交换
		int i=0;
		for(i=0;i<end;i++){
			if(a[i]>a[i+1]){
				Swap(&a[i],&a[i+1]);
				exchange=1;
			}
		}
		if(exchange==0)break;     //该趟冒泡排序没有进行过交换,已有序
	}
}

例题:

【题目描述】

输入n个数,将这n个数从小到大输出(n<=10000)。

【样例输入】

6

6 5 3 4 1 2

【样例输出】

1 2 3 4 5 6

【分析】

当n=6时,数组a中的6个元素是:6,5,3,4,1,2。执行插入排序程序后,其数据变动情况:

第1轮:

[5 6] 3 4 1 2

5 [3 6] 4 1 2

5 3 [4 6] 1 2

5 3 4 [1 6] 2

5 3 4 1 [2 6]

第1轮结束,6固定下来

第2轮:

[3 5] 4 1 2 6

3 [4 5] 1 2 6

3 4 [1 5] 2 6

3 4 1 [2 5] 6

第2轮结束,5固定下来

第3轮:

[3 4] 1 2 5 6

3 [1 4] 2 5 6

3 1 [2 4] 5 6

第3轮结束,4固定下来

第4轮:

[1 3] 2 4 5 6

1 [2 3] 4 5 6

第4轮结束,3固定下来

第5轮:

[1 2] 3 4 5 6

第5轮结束,2固定下来

排序结束!

以下是代码:
 

#include<bits/stdc++.h>
using namespace std;
const int MAXN=10010;
int main(){
    int n,i,j;
    double temp,a[MAXN];
	cin>>n;
	for(i=1;i<=n;i++)
	    cin>>a[i];
		for(i=n;i>1;i--){     //进行n-1轮冒泡 
			for(j=1;j<i;j++){      //每轮进行i次的比较 
				if(a[j]>a[j+1])     //相邻两个元素比较,若逆序就交换 
				swap(a[j],a[j+1]);     //交换
			} 
		} 
	    for(i=1;i<=n;i++)
	        cout<<a[i]<<" ";
    return 0;
}

本文内容为小编自己汇总,内容可能会有错误或疏漏,感谢大家的提议!

记得点赞和关注哦~

基础算法——排序算法(C++语言) 排序算法在计算机科学与数据处理领域占据核心地位,是众多算法体系的重要基础组成部分。其核心任务是依据既定的顺序关系(如数值大小、字母顺序等),对一组数据元素进行重新排列,使数据从无序状态转变为有序状态。基础排序算法作为排序算法研究的入门内容,涵盖了多种经典且易于理解的算法,如冒泡排序、选择排序和插入排序等。这些算法基于简单直观的原理,通过反复执行比较和交换或插入操作来实现数据的排序。尽管它们在面对大规模数据时,时间复杂度可能较高,效率相对有限,但它们在算法教育和理论研究方面具有不可替代的价值。 阅读详情

相关推荐

C++ 进阶教程2 排序

冒泡排序是一种简单的排序算法,其基本思想是通过不断交换相邻的元素来将最大或最小的元素“冒泡”到序列的末端。每一轮冒泡操作都会将当前未排序部分的最大元素放到正确的位置。插入排序是一种简单的排序算法,其基本思想是将每个待排序元素插入到已排序部分的合适位置。该算法类似于我们整理扑克牌的方式,每次从未排序的部分取出一个元素,将其插入到已排序部分的适当位置。选择排序是一种简单的排序算法,其基本思想是每一轮从未排序的部分选择最小的元素与已排序部分的最后一个元素交换位置,直到所有元素都被排序。

yjs20135869的博客 698

1166: 【基础】数的排序

输入n个不超过30000的整数(n≤10)。然后求出每个数各个位的数字之和,再按每个数的数字和由小到大排列输出。由小到大排列的每个数的数字和(每个数之间保留一个空格)

sbkcdkcl的博客 811

c++排序代码

用c++的选择排序,输入n个数,输出n个数的排序

C++排序算法总结

一:排序算法考察指标 考察排序算法,我们一般要考察算法的复杂度和算法是否是稳定排序。稳定排序是指在一个序列中,A与B的值相等,经过排序后,A与B的相对顺序没有改变,则该算法称为稳定排序。 二:初等排序算法 void swap(int *a,int *b){ int v; v = *a; *a = *b; *b = v; } int insertSort(int *A,int N){ int i,j,v,sw=0; for(i=1;i<N-1;i++){ v = A[i]; j =

weixin_45259896的博客 290

ArcGIS中如何计算多个点到特定线的最短距离

现有一个点图层和一个面图层,怎么来计算这些点到这个面图层,两个面的公共边的最短直线距离呢? 1.首先得将两个图层都转为 投影坐标系 打开工具箱-数据管理工具-要素-面转线 ​ ​ 2.将面图层设为输入要素 注意要将“识别和存储面邻域信息”勾选 ​ 3.面转线成功后 打开线属性表,线图层拥有了 LEFT_FID和RIGHT_FID两个字段 ​ 4.按属性选择,表达式中输入 “LEFT_FID”<>-1 即可选出两个面的公共边 ​再将选...

GIS蒲公英的博客 6715

[STM32]HAL STM32F103 软件I2C读写MPU6050(附DMP库移植)

本文介绍了如何在STM32F103C8T6上通过I2C协议与MPU6050传感器通信并实现DMP功能。首先,使用STM32CubeMX配置项目,设置时钟和I2C接口。然后,编写软件I2C协议的读写函数与MPU6050交互。接着,移植DMP库并进行必要修改,获取加速度计和陀螺仪数据,并将其转换为欧拉角显示在OLED上。最后,利用Keil的逻辑分析仪监测I2C时序。

m0_56841583的博客 2321

东方博宜oj题解1166-1175(c++)

【代码】东方博宜oj题解1166-1175(c++)

2401_86585637的博客 2217

别再折腾端口了!Kali Nethunter Kex 图形化桌面连接失败的真正原因与一键修复(附Termux命令)

本文深入分析了Kali Nethunter Kex图形化桌面连接失败的真正原因,包括端口配置变更、依赖缺失和权限问题,并提供了一键修复方案和Termux命令。通过详细的诊断步骤和优化配置,帮助用户快速恢复Kex功能,提升移动安全测试效率。

weixin_42530732的博客 417

【算法基础】排序算法

一.排序 二.查询

gecko 641

ORB-SLAM3单目摄像头

home/wheeltec-client/workspace/src/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src目录下找到:ros_mono.cc文件,打开找到并修改成我们自己摄像头的订阅话题(usb_cam/imahe_raw)即相机设置文件,官方提供的是Asus.yaml,可以另复制命名一个文件My_camera.yaml,将里面的相机参数修改成自己标定过的参数。sudoaptinstalllibeieng3-dev#命令安装的版本是eigen。

疯狂的石头 742

推荐国内可使用的chatGPT的工具

是基于ChatGPT 3.5和ChatGPT 4开发的chatGPT应用程序版,这个应用可以直接使用而不需要魔法,如果我们有自己的APT KEY的话可以一直使用,但是如果没有的话,我们只能使用ChatGPT 3.5 版本的,次数也是有所限制,应该是20次每天,这也足够我们的使用了,响应的速度也是非常的快。

有你真好的博客 1万+

31B大模型如何只看3B参数?Mamba2+Transformer+MoE混合架构源码导读

NVIDIA-NemotronLabs-AI-for-Media-Sports-Basketball 是一个 310 亿参数的 Mamba2-Transformer-MoE 混合架构多模态篮球理解模型:每处理 1 个 token 只激活约 30 亿参数,却支持视频、音频、图像、文本输入,最长 256k 上下文。本文带你拆解其核心文件 [modeling_nemotron_h.py](https:/

gitblog_00570的博客 1045

python 抖音采集_python爬取抖音视频的实例详解

import requestsimport jsonimport reimport osfrom pprint import pprint as ppimport queueclass DouYin:header = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*...

weixin_35795675的博客 1864

C++实现超全的基础排序算法都在这里啦|十大基础排序

插入排序 基本思想: 每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入位置。 基本操作:有序插入 在有序序列中插入一个元素,保持序列有序,有序长度不断增加。 起初,a[0]是长度为1的子序列。然后,逐一将a[1]至a[n-1]插入到有序子序列中。 在插入a[1]前,数组a的前半段(a[0] ~ a[i-1])是有序段,后半段是a[i] ~ a[...

diviner_s的博客 2262

Scratch 3.0角色控制避坑指南:为什么你的键盘移动总卡顿?

本文深入剖析了Scratch 3.0中角色移动卡顿的根本原因,指出依赖`当按下`事件积木的局限性。通过对比分析,推荐采用`重复执行`结合`如果<键被按下?>`的循环控制方案,并引入速度变量模拟惯性,从而实现流畅、实时的键盘控制优化,显著提升游戏操作体验。

dd012的博客 1013

CGAL AlphaShape算法(自适应Alpha值,二维版本)

CGAL AlphaShape算法(自适应Alpha值,二维版本)

dayuhaitang1的博客 2322

基础算法3——排序算法

快速排序,归并排序的算法原理

2503_91623411的博客 2045

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++基础-介绍·数据结构·排序·算法

RPC即远程调用(Remote-Procedure-Call),指的是在分布式应用程序中,由于不同的服务程序处于不同的进程甚至不同服务器中,需要通过各种协议进行调用,例如网站之间可以通过HTTP协议调用彼此的接口,或者通过TCP/UDP协议完成即时传输,而使用RPC是程序之间高效传输的最佳选择。(前提:数据必须是有序的)先拿到中间索引的值进行对比,得到想要的值在左半边还是右半边,之后对所在的半边再次执行拿到中间索引的值进行对比后分半的操作,重复循环直到找到目标。连续存储空间,有序,带有索引,可重复。

u013102711的博客 849

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

cpp-sort与标准库排序对比:为什么选择这款C++排序神器?

cpp-sort是一款专为C++设计的排序算法库,提供了丰富的排序算法和相关工具,相比标准库排序函数,它在性能、灵活性和功能丰富度上都有显著优势。无论是处理简单的整数排序,还是复杂的自定义类型排序,cpp-sort都能为你提供更高效、更专业的解决方案。 ## 性能对比:cpp-sort如何超越标准库? 当谈到排序性能,cpp-sort在多个方面展现出超越标准库`std::sort`的实力。在随

gitblog_00382的博客 665

C++排序算法

选择排序、冒泡排序、插入排序、快速排序

small_shrimp_的博客 1424

按名次对数据进行排序cpp_十大经典排序算法

最近在工作中偶然间涉及到数据库的存储和访问,数据库里存放着员工的指纹、年龄以及姓名等信息,当然指纹是通过md5加密存储的。目前需要对员工的年龄、学历、工作年限等进行排序,如果只有几十个上百个样本,应该不会那么麻烦;关键这是几万名员工的数据,这个量很大,马虎不得。悄悄的告诉你,别惹我,我懂得删库跑路哦。脑海中对排序的记忆有点模糊,只对「归并排序」印象较为深刻,为了加深理解,重拾「数据结构与算法」,并...

weixin_39814925的博客 717

十大排序算法C++完整实现教程

本文精选了5道经典C++算法题,涵盖双指针、哈希表、滑动窗口等核心技巧。题目包括:奇偶排序(双指针法)、检测重复元素(哈希表+滑动窗口)、查找特殊整数(四分法)、验证山脉数组(单次扫描)和最长连续递增子序列(动态计数)。每道题都配有详细注释的代码实现和复杂度分析,时间复杂度均为O(n),空间复杂度从O(1)到O(n)不等。这些题目适合算法初学者系统训练数组处理能力,建议通过实际编译调试来加深理解。

zxjiaya的博客 807

C++十大排序算法

计数排序的时间复杂度为 O(n + k),其中 n 是待排序元素的数量,k 是数据的范围大小。桶排序(Bucket Sort)是一种分布式排序算法,它将待排序的元素分配到若干个桶(Bucket)中,然后对每个桶中的元素进行排序,最后将所有桶中的元素按顺序合并。冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地遍历待排序的列表,比较相邻的元素并交换它们的位置来实现排序。选择排序基本思想是每次从待排序的数据中选择最小(或最大)的元素,放到已排序序列的末尾,直到全部数据排序完成。

qq_55527904的博客 1243

C++实现排序算法之堆排序

一、算法思想 堆排序是利用堆性质进行的一种选择排序 概念: 堆:堆是一棵顺序存储的完全二叉树 每个节点的值都不大于其左右孩子节点的值的堆叫做小根堆(下左图) 每个节点的值都不小于其左右孩子节点的值的堆叫做大根堆(下右图) 设当前元素在数组中以R[i]表示,那么, (1) 它的左孩子结点是:R[2*i+1]; (2) 它的右孩子结点是:R[2*i+2]; (3) 它的父结点是:R[(i-1)/2]; (4) R[i] <= R[2*i+1] 且 R[i] <= R[2i+2]。 堆排序步骤如下:

qq_38307826的博客 4189

C++排序算法总结(附 完整cpp程序)

排序算法的简单总结

ahundredmile的博客 649
上一篇: C++基础算法教程|数据排序(2)
下一篇: C++基础算法教程|高精度算法
沾花把玖
博客等级 码龄5年 899粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值