插入排序算法,c++ 模板技术表述,完全兼容标准库容器!!!

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

插入排序算法,c++ 模板技术表述,完全兼容标准库容器!!!

这里用到c++ STL中traits机制。

为了清晰的表述,用两个文件。

贴代码!!!


#pragma once 
#include<iterator> // std::iterator_traits



namespace mystd{
	//此函数可以很好地与标准库兼容
	//升序排列
template<class random_access_iterator> // 随机访问迭代器
	void insert_sort(random_access_iterator first,random_access_iterator last)
	{  //利用traits机制
		typedef typename std::iterator_traits<random_access_iterator>::value_type value_type;
		std::size_t n = last - first;
		if(n == 0 || n == 1) return ;
		random_access_iterator left = first;
		while(++left != last)
		{
			if(*(left - 1) <= *left)
				continue;
			else
			{
				value_type temp_val = *left;
				random_access_iterator ptr = left;
				while(ptr != first) //回溯查找合适的位置
				{
					if(*(ptr - 1) <= temp_val) //表明已经找到,退出循环
						break;
					else
					{
						*ptr = *(ptr - 1);
						ptr--; //继续回溯
					}
				}
				*ptr = temp_val; //将保存的值放到正确的位置
			}
		}
	}

} // end of namespace mystd 


下面是一个简单的测试程序!上面的头文件命名为"test.h"


#include<iostream>
#include"test.h"
#include<vector>
#include<cstdlib> // rand() 


using std::cout;
using std::endl;

int main()
{
	const int mn = 10;
	std::vector<int> my;
	for(int i = 0; i < mn; ++i)
		my.push_back(rand() % 10000); //利用随机数


	cout<<"不排序的情况:"<<endl;
	for(int i = 0; i < mn; ++i)
		cout<<my[i]<<"\t";
	cout<<endl;


	cout<<"排序的情况:"<<endl;
	//传入迭代器
	mystd::insert_sort(my.begin(),my.end());
	for(int i = 0; i < mn; ++i)
		cout<<my[i]<<"\t";
	cout<<endl;

	system("pause");
	return 0;
}










C++顺序表用vector定义,以及一个简单的插入算法 PS:四月末赶紧写一篇,保持每月全勤!!//*************************************************************************************************************************最近开始学习数据结构,手边有一本C描述的,作为C++的真爱粉,当然要把他们都改造成C++形式啦!!!顺序表的C定义... 阅读详情

相关推荐

C++ 插入排序——直接插入排序 详解

插入排序也是最简单的一类排序方法,我今天介绍的也是插入排序里最直观且浅显易懂的直接插入排序。对这个很简单的排序,记得当时也是花了近两个晚上才搞懂它的原理的,接下来就来介绍一下我的思路: 我曾经也在网上搜索了很多别人写的博客也百度看了别人的想法,但怎么说呢,大概是一百个人就会有一百种想法,也可能是我没有看到正中我心意的那一篇博客,导致看了很多别人写的代码以及图片示例都没有解决我心里的疑问和不解。现在我就来写一下我对这个排序的理解,希望曾经跟我一样有这样疑问的朋友,能在我的博客里找到答案。 直接上例子,通过

weixin_62254935的博客 2万+

C++sort函数的用法

C++sort()函数的用法 近来看了c++标准库这本书,学到了很多,就把这其中的一点C++sort()函数的用法写下来和大家分享吧! (一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高!

liuzuyi200的专栏 6万+

【MATLAB例程,无人机避障7】基于RRT*与人工势场法(RRT*+APF)的多无人机二维动态路径规划与避障

程序采用快速扩展随机树星算法(RRT*)与人工势场法(APF),实现四架无人机在二维动态障碍环境中的路径规划与协同避碰。通过RRT*的邻域选父和节点重连优化全局参考路径,利用APF进行局部动态避障,绘制全局路径、实际轨迹、安全净间隙、速度与加速度及航程等图像,对比RRT+APF与RRT*+APF的规划效果。无人机起终点、障碍物分布、采样次数及运动约束均可自行调整。

C++ 标准库 排序算法

目录一 概述二 辅助函数三 std::sort四 std::stable_sort五 std::partial_sort六 std::patial_sort_copy七 std::nth_element八 std::make_heap九 std::push_heap十 std::pop_heap十一 std::sort_heap十二 github十三 参考 一 概述 C++ 标准库中提供了很多算法,定义于头文件 < algorithm >。本文主要探究以下用于 区间元素排序 的算法: std

程序员Link 1691

TC8测试TCP-UNACCEPTABLE-04/006

TC8测试TCP-UNACCEPTABLE-04/006

PSIM-串联谐振半桥LLC开关电源+PFM变频闭环控制【仿真+计算书+参考文献】

内容概要:本文档系统性地整合了电力电子与控制系统仿真领域的丰富资源,聚焦于基于PSIM和Simulink平台的串联谐振半桥LLC开关电源建模与仿真,深入探讨PFM变频闭环控制策略的设计与实现。内容涵盖LLC谐振变换器的工作原理、关键参数设计、开环与闭环仿真模型构建、软开关技术(ZVS/ZCS)、恒压恒流双竞争控制机制以及调频控制等核心技术,配套提供完整的仿真文件、计算书和参考文献,有助于深入理解高频开关电源系统的动态响应特性与稳定性分析方法。此外,文档还汇集了大量拓展性仿真资源,涉及双向DC-DC变换器、PWM整流器、PFC电路、储能系统、微电网优化、DAB变换器、并网逆变器等多个方向,构成一套完整的科研与工程实践参考资料体系。; 适合人群:适用于电力电子、电气工程及其自动化等相关专业的高校本科生、研究生,以及从事开关电源设计、新能源系统开发、电力变换器研发等工作的工程技术人员。; 使用场景及目标:①深入学习LLC谐振变换器的拓扑结构与闭环控制原理;②掌握PSIM/Simulink在电力电子系统中的高精度建模与仿真技能;③为科研项目、学位论文或产品开发提供可复用的技术方案与代码基础;④深化对PFM控制、软启动过程、ZVS/ZCS实现机制及系统稳定性的理解; 阅读建议:建议结合文档中提供的仿真模型与计算书进行同步操作,优先剖析主电路拓扑与控制逻辑架构,再逐步开展参数调节与仿真验证实验,同时可参考所列相关资源拓展技术视野,提升综合设计能力。

C++拾趣——使用stl标准库实现排序算法及评测

今天看了一篇文章,讲各种语言的优势和劣势。其中一个观点:haskell非常适合写算法,因为使用者不用去关心具体的计算机实现,而只要关注于操作语义。这让它在专心研究算法的人中非常受欢迎。所以很多时候,语言的争论没有太多的意义,有意义的是它适不适合某些场景或者某些人。(转载请指明出于breaksoftware的csdn博客) 目前在网上讨论排序算法更多是C语言实现的。...

方亮的专栏 2736

Simulink中扩张状态观测器ESO搭建与参数整定实战

扩张状态观测器(ESO)是自抗扰控制(ADRC)的核心,用于估计系统总扰动并实时补偿。其原理是将扰动扩张为状态变量,通过观测器带宽配置增益,实现扰动估计。在Simulink中搭建ESO可直观验证连续与离散域性能,解决参数整定与噪声折中问题。典型应用包括运动控制、电力电子和机器人驱动。本文基于MATLAB/Simulink,详细讲解线性ESO的模型结构、参数计算、离散化实现及常见问题排查,帮助读者从零搭建并调试ESO仿真。

weixin_34116482的博客 221

深入C++与QT高频面试题(不定时更新)

本文总结了C++、数据库和Qt相关的常见面试题,涵盖以下核心内容: C++特性与智能指针 智能指针(unique_ptr/shared_ptr/weak_ptr)解决内存管理问题 构造函数/析构函数特性,虚函数与纯虚函数区别 STL容器分类与特性(vector/list/set/map等) 多线程编程 线程创建方式(Thread类/moveToThread) 线程同步机制(互斥锁/条件变量/读写锁) 进程间通信方式(管道/共享内存/消息队列) 数据库基础 事务ACID特性与操作流程 索引原理与使用场景 关系

阿博的博客 1254

LaMAR数据集下载和使用流程

LaMAR数据集

qq_51745206的博客 971

<Verilog实现除法器> Verilog实现牛顿-拉夫逊(Newton-Raphson)除法器

阿斯顿阿斯顿啊啊是打发士大夫

IC跳跳鱼的博客 3585

C++类模板的使用-排序

最近发现自己类模板的使用好像不记得去了,写了个排序模板练练手感,嗯还不错,一次写对 下面是写的是快排以及归并排序 #include #include #include #include #include #include using namespace std; template void print(const T *p,const T *q, string gap = "

qq_18661257的专栏 1902

zabbix监控深信服下一代防火墙配置

深信服下一代防火墙v8.0管理界面,zabbix,SNMP

weixin_43996471的博客 6871

c++ string类的完整实现!!!

c++ string类的完整实现,标注库有的功能这里基本都有,在此基础上可以进行良好的扩充!!!

爱读庄子的码农 1万+

泛微Ecology9单点登录实战指南:从Token获取到页面跳转

本文提供了一份详尽的泛微Ecology9单点登录实战指南,重点解析了Token跳转式SSO的核心流程。内容涵盖从理解关键参数(如appid、loginid)与一次性Token机制,到通过代码示例演示如何正确调用接口获取Token,并详细说明了拼接不同场景跳转地址的完整规则与安全实践,旨在帮助开发者高效、稳定地实现业务系统与OA门户的无缝集成。

ol789012345的博客 1063

CKAD-CN考试之路----12

显然,对应的value都已经实现了加密.保存退出,等待pod重新创建。确认secret是否被加密。编辑secret文件。

Q先生 444

c++ 头文件<cstring>(或者string.h)中的常见函数的实现!

c++ 头文件<cstring>(或者string.h)中的常见函数的实现!

爱读庄子的码农 7283

【ComfyUI】Animate 保留原视频背景角色替换视频生成

本文介绍了智能创作与视频生成的工作流设计,强调其作为围绕业务目标、数据流转和模型能力的有机整体。工作流由数据输入、模型处理、结果合成和输出展示构成,通过节点化连接实现高效复用与扩展。文章重点解析了核心模型(如CLIP Vision、WanVideo等)的功能和协作方式,以及各类节点(输入、处理、控制、输出)的作用。最后展示了工作流在视频角色替换、虚拟试衣等场景的应用价值,并提供了相关开发资源链接。该设计通过模块化实现了灵活适配不同业务需求的能力。

Mr数据杨 1862

浅谈windows 编程中SendMessage函数的妙用!!!

浅谈windows 编程中SendMessage函数的妙用!!!

爱读庄子的码农 6993

爆肝5万字❤️Open3D 点云数据处理基础(Python版)

本文为Open3D 点云数据处理基础教程(Python版),小白也能轻松上手!还等什么呢,学起来!

孙悟空 13万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

自己写了一个c++ bitset,功能非常齐全!

c++ bitset用途很广,而理解它的最好方式莫过于自己写一个,重新造轮子还是非常有乐趣的,废话不多说了,贴代码。 首先是一些必要的函数,封装在名字空间mystd里面。

爱读庄子的码农 5166

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

c++ 头文件<cwchar>中常见函数的实现!!!

c++ 头文件<cwchar>中常见函数的实现!!!这里有wcsncmp,wcsncat,wmemmove,wmemcpy函数的实现!!!

爱读庄子的码农 4271

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

c++ char_traits模板类的实现!!!

char_traits模板类实现!

爱读庄子的码农 3758

关于WM_MOUSEHOVER和WM_MOUSELEAVE消息的用法以及按钮的变色问题!

Windows编程中WM_MOUSEHOVER和WM_MOUSELEAVE消息的用法,以及按钮的变色问题!

爱读庄子的码农 3754

快速排序,c++ 模板技术表述,完全兼容标准库!!!

快速排序,c++ 模板技术表述,完全兼容标准库!!! 代码说明了一切,贴代码!!!(封装于名字空间mystd中) #pragma once #include // std::iterator_traits #include // std::less #define MYSTD_BEGIN namespace mystd { #define MYSTD_END } MYSTD_BEGIN

爱读庄子的码农 828
上一篇: c++ 头文件<cwchar>中常见函数的实现!!!
下一篇: 快速排序,c++ 模板技术表述,完全兼容标准库!!!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值