算法之排序----排序之第五篇 插入排序

排序算法——插入排序 目录 🎨基本介绍 🎹算法思想 🏸实例 🎠思路分析 🪁代码实现 🛹算法性能分析 🚀时间复杂度 🛴空间复杂度 🛸稳定性 🎨基本介绍 插入式排序属于内部排序法,是对待排序的元素以插入的方式寻找该元素的适当位置,以达到排序的目的。 🎹算法思想 插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,在有序表中从后往前进行比较,将它插入到有 阅读详情

插入排序

  • 真言

付出才会有收获,不播种何来的粮食。我是一个地地道道的写程序的农民。

  • 引言

计划很重要,推崇一个软件给大家,BaPim。

  • 思路

每次在排好序的数据集合中,插入一个数据,并放入到合适位置,使之有序。直至所有数据都有序即可。
时间复杂度O(n*n)
空间复杂度O(1)
举个例子,看图如下,源数据如下
红色框内的数据是排好序的,每次都插入排好序数据后面的一个数据
over!!!

  • 实验

这个算法的费时几乎和选择排序是一样一样的

  • 代码

test.cpp
#include<iostream>
#include<Windows.h>
#include<ctime>
using namespace std;

// declare data length size
const int size = 100000;

// function declare
template <class T>
void Insert_sort(T * data,const int length);


int main()
{

	DWORD S,E;  

	int * data = new int[size];  
	for(int i =0 ; i<size; i++)  
	{  
		data[i] = rand();  
	}  
	cout<<"data initialize over"<<endl;  
	S = GetTickCount();  
	Insert_sort(data,size);  
	E = GetTickCount();  
	//for(int i =0 ; i<size; i++)  
	//{  
	//  cout<<data[i]<<endl;  
	//}  
	cout<<endl<<"给"<<size<<"个数据插入排序,费时"<<E-S<<"毫秒"<<endl;  
	system("pause");  
	return 0;  
}

// function defined to insert sort
template <class T>
void Insert_sort(T * data,const int length)
{
	if(data != NULL && length>0)
	{
		T d ;
		for(int i = 1;i<length;i++)
		{
			for(int j = i;j>0;j--)
			{
				if( data[j-1] > data[j] )
				{
					d = data[j];
					data[j] = data[j-1];
					data[j-1] = d;
				}
				else break;
			}
		}
	}
	else
	{
		cout<<"exception of input Insert_sort"<<endl;
	}
}

TypeScript 算法手册【插入排序】 插入排序是一种简单直观的排序算法,类似于我们整理图书馆的书架,当你面对一排杂乱无章的书籍时,该如何整理它们?我们可能会这样做:从左到右一本一本来,拿起一本书,将它插入到已经按照特定顺序排列好的书籍中的正确位置,这就是插入排序的基本思想。i < len;i++) {j--;return arr;插入排序虽然在大规模数据排序中不如一些高级算法高效,它在某些特定场景下仍然有其独特的优势。当数据规模较小或者数据已经基本有序时,插入排序可能会比一些复杂的排序算法更快。 阅读详情

相关推荐

Java常见排序算法之插入排序

一、概述 本节由小千给大家分享Java常见排序算法之插入排序,之前我们说过排序是算法中的一部分。所以我们学习排序也是算法的入门,为了能让大家感受到排序是算法的一部分,我举个例子证明一下:比如麻将游戏,发完牌之后需要对手上的牌进行排序,大家想想,麻将排序如何排呢?它有什么特点呢?而且在摸牌打牌的过程中,我们要不断的排序,如何排序呢?选择什么排序算法最快呢? 以上这种情况我们就可以分析选择哪种排序算法更高效。比如下图已经有一副固定顺序的牌了: 此时轮到我们摸牌,摸到的牌如下: 此时,要将这个“三同”放到上面

xiaoxijinger的博客 1181

常见排序算法-折半(二分)插入排序

其实是主要在二分查找算法的基础上执行插入操作 接下来我结合算法的实际例子来解释 初始数组 10 21 7 13 14 3 12 ,对其进行由小到大进行排序 /先解释一下2分法,比如在一个有序数组{1,2,3,3,6,9,11}中,我要查找数字2在其中的位子,首先先比较2与数组中间数字3的大小,发现2小于3,则2肯定在数字3的左边数组{1.2.3},比较2与{1.2.3}的中间数2...

weixin_42373888的博客 577

ALSA音频开发实战:如何用snd_pcm_avail避免缓冲区溢出(附完整代码)

本文深入探讨了在ALSA音频开发中,如何利用`snd_pcm_avail`函数有效管理环形缓冲区,从而避免音频数据溢出或下溢。通过实战代码示例,详细解析了该函数在播放场景下的核心作用,即实时查询可写入的帧数,并构建了自适应写入循环以实现稳健的流量控制,确保音频流的平滑与稳定。

weixin_29183637的博客 461

转-各种排序动图

1 快速排序 介绍:   快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需

0_o_c 3589

MiFlash Prime免授权刷机实战:解锁小米9008 EDL救砖新方案

MiFlash Prime作为免授权刷机工具,有效解决了小米设备在9008 EDL模式下因账号验证无法救砖的难题。本文详细介绍了从驱动安装、进入EDL模式到固件刷写的完整流程,帮助用户安全快速地恢复变砖设备,是维修人员和极客的实用解决方案。

5f4d3s2a1q的博客 2854

算法-基于MACD的Adaboost股价涨跌预测模型

MACD是一个指标,具体用法是MACD>0看涨,反之看跌,果真是这样的吗?由于所有的技术指标都基于对历史数据的统计,指标的滞后性也就难免,有时候MACD明明大于0,股价仍然跌,有时候macd小于0,股价仍然涨。 本文基于Adaboost算法提出了一种基于macd的线性阀值分类器作为若分类器,通过在限定的解空间内寻找使得错误率最小的阀值和偏置,这样做避免了训练若分类器的复杂性,经验证,这种方法有效。

mtaxot的博客 8022

经典排序算法(4)——折半插入排序算法详解

折半插入排序(Binary Insertion Sort)是一种插入排序算法,通过不断地将数据元素插入到合适的位置进行排序,在寻找插入点时采用了折半查找。 一、算法基本思想 (1)基本思想 折半插入排序的基本思想是:顺序地把待排序的序列中的各个元素按其关键字的大小,通过折半查找插入到已排序的序列的适当位置。 (2)运行过程 直接插入排序的运

渴望,就奋力追寻... 5万+

Buck电路中自举电容串联小电阻的作用

在Buck电路中,自举电容(Cboot)驱动高边MOSFET时,因寄生电感和电容会形成LC谐振回路,导致SW节点高频振铃,引发EMI问题。串联小电阻(Rboot)可引入阻尼效应,抑制振铃、改善波形和EMI性能,但会略微增加开关损耗。设计时建议预留可调电阻位(2Ω~20Ω),根据实测结果平衡效率与系统稳定性,提升电源可靠性。这一措施是优化开关电源EMC的常见实践。

硬核科技 624

排序算法之折半插入排序

折半插入排序 在直接插入排序的基础上做的改进,直接插入排序在寻找插入位置时是从后到前依次比较,直到找到插入位置。而折半插入排序在寻找插入位置时,先与有序序列中的中间位置R[mid]进行比较,如果比中间位置上的记录大,则在R[mid+1…N]中寻找,继续与右区间的中间记录进行比较;如果比中间位置上的记录小,则在R[0…mid-1...

weixin_34138377的博客 185

如何利用ADS中的耦合线设计带通滤波器并转换为HFSS模型

耦合线带通滤波器是一种常用的微带滤波器形式,由多个长度为四分之一波长的耦合线节组成,在所需频点形成谐振,构成滤波器的频率响应特性。首先我们先来了解一下耦合线带通滤波器的电路结构,见下图:包括两对耦合线,中间为公共连接点,其中两对耦合线的偶奇模阻抗为(Z1e,Z1o)和(Z2e,Z2o,端口输入阻抗为Z0)。2.指定一个初始奇偶模值,ADS优化出一个合适的结果,通过奇偶模值利用linecalc工具计算出微带耦合线尺寸。假设中心频率为2GHz,则对应频点的电长度为。5.运行结果,两个软件仿真结果基本一致。

auqihc的博客 2227

ZYNQ出现问题及解决办法汇总(一直更新)

问题目录使用软件及开发板版本一,vitis在build project时卡住。二,Could not find FPGA device on the board for connection 'Local'三,FPGA configuration failed:DONE PIN is not high四,Could not find ARM device on the board for connection 'Local' 使用软件及开发板版本 开发板:MZ7XA-7020 软件:vitis2020.2(

qq_45057368的博客 1万+

二分查找折半查找排序

在一个有序的数组中,折半查找一个元素key,如果能找到返回数组的下表,如果找不到,返回-1。 实现如下所示: /** * 二分查找法 * @author jcm * 2016年8月6日 */ public class BinarySerach { public static void main(String[] args) { int a[] = {13,19,32,35,56

猛龙过蒋的专栏 1667

打开 AI 投研新时代 —— 深度解析 GitHub 高星项目 daily_stock_analysis

GitHub热门开源项目"daily_stock_analysis"是一款AI驱动的智能股票分析工具,能自动抓取行情数据、分析新闻语义并生成结构化报告。该项目采用Python开发,通过GitHub Actions实现全自动运行,支持邮件、企业微信等多渠道推送。核心功能包括AI决策仪表盘、多数据源整合和零成本部署方案,特别适合需要自动化投研辅助的个人投资者。项目强调其仅为分析工具而非投资建议,提醒用户注意AI模型的潜在误差。该工具通过智能化处理重复工作,帮助投资者提升决策效率,成为量化投资

陈奕昆的博客 1522

Java算法系列第五篇:插入排序算法详解

插入排序是一种简单且稳定的排序算法,适用于少量数据的排序。通过二分查找优化和希尔排序,可以进一步提高插入排序的效率。在实际应用中,插入排序常用于小规模数据的排序和其他高级排序算法的优化。你的支持是我持续创作的动力!下期我们将详细讲解选择排序算法,敬请期待!这篇文章详细介绍了插入排序的原理、实现及其优化方法。如果你有任何问题或建议,欢迎在评论区留言!

阿里渣渣java研发组-群主 661

#systemverilog# 之 event region 和 timeslot 仿真调度(三)Verdi 辅助查看

通过今天的学习,我们知道:event region 是event sequence 的全集。我们打开了 event region feature 也就开启了event sequence 的功能。

那么菜的博客 1365

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

几种重要的排序算法——插入排序

几种重要的排序算法 1.插入排序 插入排序分为直接插入排序、折半插入排序、希尔排序(shell sort),后两种是在直接插入排序的改进上而来。 1.直接插入排序 排序思路:假设待排序的元素存放在数组A[1..n]A[1..n]A[1..n]中,在排序过程的某一时刻,A被划分为两个子区间A[1..mid]A[1..mid]A[1..mid]和A[mid+1..n]A[mid+1..n]A[mid+1..n],其中前一个子区间为排好序的有序区,而后一个子区间为未排序的子区间,暂称作无序区。该排序算法顾名思义

five_east_west的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

折半插入排序算法

  折半插入排序(Binary Insertion Sort)是对插入排序算法的一种改进。所谓插入排序,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。   具体操作: 在将一个新元素插入已排好序的数组的过程中,寻找插入点时,将待插入区域的首元素设置为a[low],末元素设置为a[high]。将待插入元素与a[mid](其中mid=low+(high-low)/2)相比较,如果比参考元素小,则选择a[

大彤小忆的博客 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ssm框架搭建

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

插入排序算法

  插入排序(Insertion sort)一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动 。   插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的

大彤小忆的博客 6996

C++算法之插入排序

C++算法之插入排序 文章目录C++算法之插入排序一、算法描述二、代码实现三、复杂度分析 一、算法描述 整理插入排序算法描述如下: 枚举序列中第2~n个元素。 当枚举元素i时,前i-1个元素已经有序。将第i个元素插入到前i-1个元素的有序序列中,形成长度为i的有序序列。 枚举过程结束后,整个序列有序。 在上述算法描述中,我们有个关键的步骤——插入操作:将第i个元素插入到前i-1个元素的有序序列中,形成长度为i的有序序列。 怎样实现这个过程呢? 一种实现思路和前面介绍的“火车站插队”过程十分类似。比如

R_mine的博客 5872

Java 插入排序算法

简介 上一章我们学习了 Java 选择排序算法,这一章,我们来学习插入排序算法,so,多了不说,继续老规矩,学习内容如下: 1、插入排序的定义 2、插入排序的思路 3、代码实现 1.插入排序的定义 插入排序算法:是基于某序列已经有序排列的情况下,通过一次插入一个元素的方式按照原有排序方式增加元素 2.插入排序的思路 默认从第2个数据开始比较。如果第2个数据比第1个小,则交换。 然后在用第3个数据比较,如果比前面小,则插入。否则,退出循环。 说明:默认将第1数据看成有序列表,后面无序的列表循环每一个数据

ZengTao 2149

插入排序算法原理

插入排序 1.概念 插入排序,顾名思义其基本操作就是插入,不断把一个个元素插入到一个序列中,最终得到排序序列。为此只需维护好所构造序列的排序性质,最终就能自然得到结果。 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到...

xin_xin666的博客 9773

排序算法之插入排序

插入排序 插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序数组和一个无序数组,开始时有序数组中只包含一个元素,无序数组中包含有n-1个元素,排序过程中每次从无序数组中取出第一个元素,把它依次与有序数组的元素进行比较,将它插入到有序数组中的适当位置,使之成为新的有序数组,直到最后无序数组没有元素为止。 算法步骤 将待排序数组第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置

morris 1万+

排序算法之——插入排序

本文介绍了插入排序的概念、原理、使用场景,最后用Java实现了排序方法。

卜大爷的博客 2万+
上一篇: 算法之排序-----排序第四篇 堆排序
下一篇: 面试题之陈利人 单链表和之恋
p11323
博客等级 码龄14年 79粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值