【模板】插入排序

C++模板插入排序 插入排序的C++模板实现 阅读详情

插入排序基本思想

将第0个元素看作是一个有序序列,然后依次从第1个元素开始逐个插入到这个有序序列当中,执行n-1次就是有序序列了。

平均时间复杂度

o(n^2)

最好时间复杂度

 o(n) (当原数组序列正好已经有序了,只需要比较n-1次就可以了)

最坏时间复杂度

o(n^2) (当原数组序列是逆序的,需要比较n(n-1)/2次)

特性

具有稳定性(相同元素的相对位置不会改变)

参考链接

//插入排序 
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
void insertSort(int a[],int n)
{
	for(int i=1;i<n;i++)//第0个是有序的,从第1个开始插入 
	{
		int tmp = a[i];	//记录 
		for(int j= i-1;j>=0;j--)//倒着从第i-1个开始判断 
		{
			if(tmp < a[j]){
				a[j+1]=a[j];//比tmp大的都向后移动 
				if(j==0){
					a[j]=tmp;//注意:如果全部都比tmp大,到了数组头部就要直接插入了 
					break;
				}
			} 
			else {
				a[j+1] = tmp;//找到了比插入值大的元素就插入
				break; 
			} 
		}
	}
} 
void insertSort2(int a[],int n){
	for(int i=1;i<n;i++){
		int j;
		int elem = a[i];
		for(j=i-1;j>=0&&elem<a[j];j--){//换成大于就是从大到小排列了
		//从第i-1个开始判断,只要没到数组头部且比插入值小,就向后移动 
			a[j+1]=a[j];
		}
		a[j+1]=elem;//只要到了数组头部,或者找到了比插入值大的元素,就插入 
	}
}
int main(void)
{
	int n = 10;
	int arr[10] = {0};
	for(int i=0;i<n;i++)
	{
		arr[i]=rand()%100;
	}
	for(int i=0;i<n;i++)
	{
		cout<<arr[i]<<" ";
	}
	cout<<endl; 
	insertSort2(arr,10);
	for(int i=0;i<n;i++)
	{
		cout<<arr[i]<<" ";
	}
	return 0;
}

 

数据结构与算法——插入排序以及C++函数模板实现 插入排序以及C++函数模板实现 阅读详情

相关推荐

基于51单片机的智能灌溉系统

基于51单片机的智能灌溉系统

jiejiezuishuai的博客 2103

插入排序,选择排序,冒泡排序,顺序搜索,二分搜索,迭代,求最大公因数,最小公倍数等简单模板

冒泡排序其实它的名字就十分的形象,就把每个元素都看作是一个泡泡,每次都比较泡泡的大小,如果那个泡泡更大,就让它到前面去,这样一遍又一遍的比较下去,使得泡泡成功变为从小到大的排序。选择排序是找一个数组中最大的那个数,把它放在第一个位置,再从剩下的数中找到最大的放在第二个位置,以此类推,直到只有两个数,把这两个数中更大的放在倒数第二个位置,另外一个放在最后。插入排序就如同一副扑克牌,我们一张一张的开始摸牌,一张一张的放,找到相应的位置,让后面的牌往后挪一格,再把这个牌放到挪往后的这个空位上。

2301_79431343的博客 2074

告别抓包:一个Xposed模块教你监控抖音App的本地数据变化

本文详细介绍了如何利用Xposed框架开发模块,实现抖音App本地数据监控的技术方案。通过Hook关键方法,开发者可以实时获取用户信息、推荐算法参数等核心数据,无需Root设备即可高效调试。文章包含完整的环境配置、代码实现和优化技巧,为移动应用开发与测试提供创新解决方案。

weixin_27015733的博客 385

模板-插入排序

插入排序原理:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 插入排序核心:假设第一个元素排好,之后的元素对排好的部分从后向前比较并逐一移动。 理解:看代码,相当于每遍历一个,若不符合队列次序,就把他向前面扔,查到合适的数后面 #include using namespace std; const int maxn=10000

misayap的博客 353

Debian 12 安装nodejs(包括node、npm、npx、yarn、pnpm、cnpm、bun)

【代码】Debian 12 安装nodejs。

mirana的专栏 8030

芋道前后端分离项目跳过登录

在此页面中可以看到当在没有获取到token时,如果此页面在白名单中则直接进入,所以我们将刚刚配置在。在此路径下配置需要跳过登录的页面路径,记住path中编辑的名称。根据以上两图可以发现芋道的。将所有需要跳过登录的方法。,否则会提示登录状态过期。至此完成免登录进入页面。

FanZaiYo的博客 5486

用模板写插入排序-数组

为了熟练模板的使用,今天,我们共同来写一个针对数组的插入排序算法,为了实现算法与数据类型相分离,我们这里采用函数模板的机制,具体如例1所示。例1 数组插入排序ArrayInsertSort.hpp内容:#ifndef _ARRAY_INSERT_SORT_H_ #define _ARRAY_INSERT_SORT_H_ template<typename T> bool I...

weixin_30265171的博客 168

九齐NY8B062F单片机:12位ADC与4路PWM在智能家居控制中的实战应用

本文详细介绍了九齐NY8B062F单片机在智能家居控制中的实战应用,重点解析其12位ADC高精度传感器数据采集和4路PWM精准驱动技术。通过实际案例展示如何利用该单片机实现温湿度监测、灯光调节及电机控制,并分享低功耗设计与抗干扰方案,为低成本高可靠性的智能家居设备开发提供完整解决方案。

rnn9storyteller的博客 732

插入排序(模板)

直接插入排序:直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。、 下图是一个升序的排序过程 直接插入排序的特性总结: 元素集合越接近有序,直接插入排序算法的时间效率越高 时间复杂度:O(N^2) 空间复杂度:O(1),它是一种稳定的排序算法 稳定性:稳定 #include...

晶凌玄夜的博客 544

基于YOLOv8的建筑材料分类系统:从数据集构建到UI界面实现

建筑材料分类数据集需要包含各种常见建筑材料的图像,并对每种材料进行标注。砖块(Brick)混凝土(Concrete)钢筋(Rebar)木材(Wood)瓷砖(Tile)玻璃(Glass)钢材(Steel)塑料(Plastic)石膏板(Drywall)绝缘材料(Insulation)如果没有找到合适的公开数据集,可以构建自己的数据集。使用智能手机或专业相机拍摄各种建筑材料的照片确保在不同光照条件、角度和背景下拍摄每类材料至少收集300-500张图像。

YOLO 490

AI时代的软件质量保证新方法论

3.2.1 质量保证的方法论 质量保证(Quality Assurance, QA)是一种系统化的方法,用于确保产品或服务符合预定的质量标准。在AI时代,软件质量保证的方法论需要适应不断变化的AI技术和应用场景。 3.2.1.1 质量管理体系的构建 首先,构建一个完善

AI天才研究院 1356

【插入排序模板】

插入排序(Insertion Sort)是一种简单直观的排序算法,它将待排序的序列分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的正确位置,直到所有元素都被插入到正确的位置为止。从第二个元素开始,将其视为已排序部分。取出下一个元素,在已排序部分从后往前进行比较。如果已排序部分的元素大于取出的元素,则将该元素后移一位,继续比较前一个元素。重复步骤3,直到找到已排序部分的元素小于或等于取出的元素的位置。将取出的元素插入到找到的位置。

学习愚公的博客 199

基于VisionMaster实现数据实时存储至MySQL (二)

摘要:之前的分享主要聚焦于简单的一维数据实时存储。但在做缺陷检测项目时,情况往往更加复杂:一张检测图像中可能同时存在多个缺陷,每个缺陷都有一组独立的核心参数(如质心、长短轴、面积等)。如何在 MySQL 中记录这些成组出现的缺陷数据,而不只是简单的单条记录?

haier123888的博客 226

C++插入排序模板

#include using namespace std; template void InsertSort( T* arr, int n ) { T x; int i, j; for ( i = 1; i < n; i++ ) { x = *(arr + i); for ( j = i - 1; j >= 0; j-

恨天低 1894

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

利用c++模板实现插入排序

/* ArrayInsertSort.hpp */ #ifndef _ARRAYINSERTSORT_HPP_ #define _ARRAYINSERTSORT_HPP_ template bool InsertSort(T *pInput, int nLen) { int i = 0; int j = 0; T tTemp; if(!pInput) { return fal

zhuwenfeng的专栏 475

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

插入排序 模板

#include<bits/stdc++.h> using namespace std; vector<int> x{10,3,5,6,20,45,1,9}; vector<string> w{"a","x","z","s","o","b","y"}; template < typename RandomAccessIterator ,typename compare> void InsertSo

qq_31664927的博客 317

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

插入排序——最简单的、和模板方法的C++实现

插入排序 后期考虑使用模板 示意图 如上图所示,每次都将一个数组右侧无序部分的第一个,插入到左边有序的部分。插入的过程是在有序部分从右向左,不断交换位置。 代码 #include <iostream> using namespace std; int* sort_num(int arr[], int n); void insertion_sort() { int list[] = { 34,8,64,51,32,21 }; int len = 6; int* p; p = so

犹有傲霜枝的博客 492

用模板写插入排序-链表

今天,我们共同

尹成的技术博客 1749

插入排序(使用模板对不用类型的数组进行排序)

//插入排序 //算法:新加入元素与已经有的数据进行比较,需要移动原有数据的位置 #include &lt;iostream&gt; using namespace std; template &lt;class T&gt; void Insert(const T&amp; e, T *a, int i); //使用模版 template &lt;class T&gt; void Inserti...

graceful_tomorrow的博客 282

插入排序模板

插入排序步骤 数组只有一个数是数组有序 数组元素超过两个,从第二个数x开始,和前一个数y比较,存在三种情况(x == y, x > y, x < y) x == y x 和 y 有序 x > y x 和 y 有序 x < y 需要将x插入到0 ~ (x - 1)的合适位置 public static void insertSort(int[] arr) ...

qq_31916715的博客 9780

排序算法之插入排序(模板类)

#include using namespace std; template class element { public: element() { key = T(0);} ~element() {}; public: T key; }; class insert_sort { public: template void Sort(element list[

z444_579的博客 449

数据结构与算法——插入排序——使用C++实现函数模板

1. 插入排序原理 插入排序是最基本的排序算法,之前写过一篇文章实现插入排序,不过是用的C语言+函数指针,使得用户可以自定义升序排序还是降序排序。 现在考虑使用C++,将该算法做成一个函数模板。 2. 将排序算法做成函数模板 几个关键字:【函数模板】,【函数对象】,【匿名函数】,【友元函数】。 对于基本数据类型,构建函数模板比较简单,排序的比较也可以直接用STL里面的less和great函数对象。对于自定义类型的数据,需要实现自定义类型对象的比较,可以1)重载比较运算符,less重载"<"运

jay_zzs的博客 1206

c++-模板元编程 编译期插入排序

#include <iostream> #include <utility> #include <string> #include <vector> #include <map> #include <set> #include <stack> #include <queue> #include <algorithm> #include <boost/type_index.hpp>

qq_34179431的博客 420
上一篇: 【模板】有序表的查找 (折半查找、循环数组最小元素查找)
下一篇: 【模板】冒泡排序
coderwait
博客等级 码龄9年 20粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值