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

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

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

数据排序——插入排序

1.基本思想:

想象打牌时抓牌的情景,为了方便抓牌,抓牌时一般一边抓牌一边按花色和大小插入恰当的位置,当抓完所有的牌时,手中的牌便是有序的,这种排序方法就叫做插入排序。

当读入一个元素时,在已经排序好的序列中,搜寻它的位置,再放入读入的元素。但不能忽略一个重要的问题:在插入这个元素前,应当先将它后面的所有元素后移一位,以保证插入位置的原元素不被覆盖。

2.排序过程:

在这里插入图片描述

3.动图演示:

在这里插入图片描述

4.代码:

void InsertSort(int *a,int n){
	int i=0;
	for(i=0;i<n-1;i++){
		int end=i;     //记录有序序列的最后一个元素的下标
		int temp=a[end+1];     //待插入的元素
		while(end>=0){
			if(temp<a[end]){     //还需继续比较
				a[end+1]=a[end];
				end--;
			}
			else break;//找到应插入的位置
		}
		a[end+1]=temp;
		/*
        代码执行到此位置有两种情况:
		1.待插入元素找到应插入位置(break跳出循环到此)
		2.待插入元素比当前有序序列中的所有元素都小(while循环结束后到此)
        */
	}
}

例题:

【题目描述】

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

【样例输入】

6

15 83 79 52 68 123

【样例输出】

15 52 68 79 83 123

【分析】

当n=6时,数组a中的6个元素是:15,83,79,52,68,123。执行插入排序程序后,其数据变动情况:

第0步:[15] 83 79 52 68 123

第1步:[15 83] 79 52 68 123

第2步:[15 79 83] 52 68 123

第4步:[15 52 79 83] 68 123

第5步:[15 52 68 79 83] 123

第6步:[15 52 68 79 83 123]

排序结束!

以下是代码:

#include<bits/stdc++.h>
using namespace std;
const int MAXN=10010;
int main(){
    int n,i,j,l;
    double temp,a[MAXN];
	cin>>n;
	for(i=1;i<=n;i++)
	    cin>>a[i];
		for(i=1;i<=n;i++){
			for(j=i-1;j>=1;j--)     //在前面有序区中为a[i]找合适的插入位置
			    if(a[j]<a[i])break;     //找到比a[i]小的位置就退出,插入其后
			if(j!=i-1){
				temp=a[i];     //将比a[i]大的数据向后移
				for(l=i-1;l>j;l--)
				    a[l+1]=a[l];     //将a[i]放在正确位置上
				a[l+1]=temp;
			}
		}
	    for(i=1;i<=n;i++)
	        cout<<a[i]<<" ";
    return 0;
}

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

记得点赞和关注哦~

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

相关推荐

C++ 进阶教程2 排序

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

yjs20135869的博客 698

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

欢迎来到沾花把玖的C++算法课堂! 数据排序——冒泡排序 1.基本思想: 以n个人站队为例,从第1个开始,依次比较相邻的两个是否逆序对(高在前,矮在后),若逆序就交换这两人,即第1个和第2个比,若逆序就交换这两人,即第2个和第3个比,若逆序就交换这两人,即第3个和第4个比,......,直到n-1和n比较,经过一轮比较后,则把最高的人排到最后,即将最高的人像冒泡一样逐步冒到相应的位置。原n个人的排序问题,转换为n-1个人的排序问题。第二轮比较以此类推,直到进行n-1轮比较后,队列为有序队列。 2.动

沾花把玖的博客 1001

【华为OD机试】真题C卷-数字排列2(C++)

小明负责公司年会,想出一个趣味游戏:屏幕给出 1 ~ 9 中任意 4 个不重复的数字,大家以最快时间给出这几个数字可拼成的数字从小到大排列位于第N 位置的数字,其中 N 为给出数字中最大的(如果不到这么多数字则给出最后一个即可)。注意:2 可以当作 5 来使用,5 也可以当作 2 来使用进行数字拼接,且屏幕不能同时给出 2 和 5;6 可以当作 9 来使用,9 也可以当作 6 来使用进行数字拼接,

u014481728的博客 878

C++排序(基础)超详细!

这些是基础,一定要理解其原理和复杂度。特别是什么情况下用什么排序更好。

Rudy1124的博客 920

信息学奥赛C++基础教程:算法与编程实践

C++是一门广泛使用的编程语言,尤其在系统/应用软件开发、游戏开发以及实时物理模拟中占据着重要的地位。本章旨在为读者介绍C++的基础语法,使读者能够理解和掌握编程的基本概念,并为进一步学习更高级的编程技巧打下坚实的基础。掌握C++的基础语法是任何想要精通这门语言的开发者的必经之路。本章的内容为读者提供了一个清晰而全面的C++基础概念的入门级了解,后续章节将在此基础上进一步深入探讨算法、数据结构及它们在实际问题中的应用。

weixin_42596214的博客 1004

Unity简单操作:PostProcessing的使用

Postprocessing是一个unity2018版本的集成后期插件,有了这个插件,之后用unity开发时,后期调整颜色、光晕等会很方便。 目录 新建一个postprocessing profile(配置文件)。​ 参数说明: 新建一个postprocessing profile(配置文件)。 在主相机下加一个组件PostProcess Layer。 注意:需要将相机的Layer层设置与Post Process Layer 下的Volume blending(体积混合)...

weixin_39114763的博客 7368

插入排序法给数组排序(用函数实现)

sizeof(a) / sizeof(int)用于计算数组中包含整型数字的个数,然后调用InsertSort函数进行排序,最后得出运行结果。创建完插入排序的函数后,我们还需要一个定义一个PrintArray函数,用来打印数组的值。2.//注意,i<n-1,并不是i<n,如果将n-1换成n,则会引起越界的问题。这就是我所介绍的插入排序法,如有错误,评论区帮忙支出,新手小白刚入门,见谅。最后,定义一个TestInsertSort函数用来排序我们所需要的数组。1.插入排序的基本概念。

2301_79582015的博客 879

Comsol 压电换能器声场仿真(远场分析、边界元法优化)

本文详细介绍了在Comsol中使用边界元法进行压电换能器远场声场仿真的高效方法。针对传统有限元法计算远场时内存消耗大、耗时长的问题,文章阐述了边界元法在处理无限域、提升计算效率和精确获取远场指向性方面的核心优势,并提供了从多物理场耦合设置、网格划分策略到求解器配置及结果验证的完整实战指南。

weixin_29045585的博客 405

c++插入排序代码详解

// // Created by 91614 on 2018/12/20. //插入排序 #ifndef ARRAY_9_11_H #define ARRAY_9_11_H template&lt;class T&gt; void insertionSort(T a[],int n){ int i,j;//j是将要插入的位置,i是目标元素 T temp;//模板 //默...

qq_42867831的博客 1257

Bartender 2021破解版安装教程:手把手教你从下载到激活(附详细步骤图)

本文详细介绍了BarTender 2021专业版的安装与高效应用指南,从基础配置到高级条码设计,帮助用户快速掌握标签设计与打印技术。内容涵盖安装步骤、标签模板创建、数据连接与批量打印技巧,以及高级功能如安全策略与自动化集成,适合零售、物流、制造等行业用户提升工作效率。

p4q5r6s7t的博客 2634

高精度计算Π的值(C语言)

题目要求 限制使用双向链表作存储结构,请根据用户输入的一个整数(该整数表示精确到小数点后的位数,可能要求精确到小数点后500位),高精度计算PI值。可以利用反三角函数幂级展开式来进行计算。 输入5 输出3.14159 思路分析 反三角函数幂级展开式 由公式可以看出,只要计算出来每一个R(n)的值再相加取二倍就可以得到Π的值。 经过推算,要是令R(1)=2,只需要将每个R(n),相加即可。 因...

weixin_46251155的博客 8032

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

104报文解析工具

可选择包含报文的文本文件或日志文件进行解析,可选择按条数范围或时间范围,输出结果可以在报文解析显示区,也可以输出到文件。可以对文本内容的报文文件进行高级分析,包括遥信遥测等通讯数据的具体信息,通讯帧的统计,通讯次数的统计,各种错误的分析,报文的定位功能,传输的文件具体内容等。输入完成后点击工具栏的解析报文按钮或使用右键菜单的解析就可以对报文进行解析。在报文输入区输入待解析报文并解析后,解析结果就显示在报文解析显示区和报文定位展示区及报文定位条目区。当有多条报文解析后,可以通过报文列表树具体定位某条报文。

XZHOUMIN的博客 5948

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

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

diviner_s的博客 2262

计算文本相似度的常用算法

NLP、数据挖掘领域中,文本分析是一个很重要的领域,这有助于我们去让计算机理解语言的作用和使用。文本分析是数据挖掘的重要手段,利用文本分析,我们将很快的读取到一本书、一篇文章、一段话中的关键词和核心思想,而文本相似度就是我们用来剔除无用信息或者重复信息的重要手段,让计算机去找文本中的不同。 在生活中,信息检索、数据挖掘、机器翻译、文档复制检测等领域都应用到“文本相似度”。文本不仅仅是文字,文本相似度的应用更广,除了文字的匹配,还可以是图片、音频等,因为它们的实质都是在计算机中都是以二进制的方式存在的。相.

氧小氢的博客 2万+

开源机器人库orocos KDL 学习笔记(二):Geometric

开源机器人库orocos KDL 学习笔记二:Geometric 如果按照上一篇搭建的VS2015 orocos KDL环境,会出现3个例程:geometry, chainiksolverpos_lma_demo, trajectory_example. 这一篇看一下geometry的例程。 在frames.hpp中,定义了这些class: - class Vector - class R

行者无疆的博客 6703

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

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

u013102711的博客 849

10.Labview局部变量、全局变量、引用、属性节点、调用节点用法理解及精讲

本文的结构还是首先教大家明确概念问题,然后深入理解概念并学会使用,最后在理论基础掌握的基础上,通过实例来强化大家的理解。本文依旧是**先理论后实践**的教学方式,欢迎留言或私聊提问。

关注我,更多技术问题欢迎私聊~ 1万+

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

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

gitblog_00382的博客 665

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C++排序算法

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

small_shrimp_的博客 1425

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

zxjiaya的博客 807

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

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

weixin_39814925的博客 717

C++十大排序算法

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

qq_55527904的博客 1243

c++ 排序算法总结

选择一个基准值(pivot),将数组分为两部分,使得左边部分的元素都小于等于基准值,右边部分的元素都大于等于基准值,然后分别对左右两部分递归地进行排序。:利用堆这种数据结构,将数组构建成一个最大堆(或最小堆),然后将堆顶元素与最后一个元素交换,再对剩余元素重新调整为堆,重复这个过程直到整个数组有序。:采用分治法,将数组分成两个子数组,分别对两个子数组进行排序,然后将排好序的子数组合并成一个有序的数组。:平均和最坏情况下为 (O(n^2)),最好情况下(数据已经有序)为 (O(n))。

weixin_42366947的博客 1133

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

排序算法的简单总结

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值