[3] 算法之路 – 插入排序

[3] 算法之路 – 插入排序

大家好,又见面了,我是全栈君。

插入排序算法

1、将排序部分分成两部分

2、每次从后面部分取最前面的数插入到前面部分的适当位置


该处提供两个插入排序版本号,指定间隔插入与插入排序。后面对指定间隔排序提到Shell排序中的n/2间隔与Sedgewick间隔

比如:

排序前:92 77 67 8 6 84 55 85 43 67

[77 92] 67 8 6 8455 85 43 67 将77插入92前

[67 77 92] 8 6 8455 85 43 67 将67插入77前

[8 67 77 92] 6 8455 85 43 67 将8插入67前

[6 8 67 77 92] 8455 85 43 67 将6插入8前

[6 8 67 77 84 92]55 85 43 67 将84插入92前

[6 8 55 67 77 8492] 85 43 67 将55插入67前

[6 8 55 67 77 84 8592] 43 67 ……

[6 8 43 55 67 77 8485 92] 67 ……

[6 8 43 55 67 67 7784 85 92] …… 

// 插入排序
int InsertionSort(int a[],int lens)
{
	int k;
	int tmp;
	for(int i=1;i<lens;i++)
	{
		int j=i-1;
		//取出待插数据
		tmp = a[i];
		
		// 遍历前面已排好序的序列。找插入位置
		// 在i之前查找需待插入数据a[i]的位置k
		for(k=j;k>=0;k--)
		{
			if(tmp<a[k]) a[k+1]=a[k];// 后移
			else break;//找到位置

		}
		// 找到位置。插入指定值
		if(i!=(k+1))a[k+1]=tmp;
	}
	return 0;
}

// 插入排序 - 使用指定间隔的
int InsertionSortWithGap(int a[],int lens,int gap)
{
	int k,tmp;
	// 控制插入层
	for(int m=0;m<gap;m++)
	{
		for(int i=gap+m;i<lens;i+=gap)
		{
			int j=i-gap;
			tmp=a[i];
			for(k=j;k>=0;k-=gap)
			{
				if(tmp<a[k]) a[k+gap]=a[k];
				else break;
			}
			if(i!=(k+gap))a[k+gap]=tmp;
		}
	}
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115563.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月2日 下午5:00
下一篇 2022年2月2日 下午6:00


相关推荐

  • 自建呼叫中心系统会遇到什么问题

    自建呼叫中心系统会遇到什么问题对于外包 托管型呼叫中心 通常的理解就是能减少开支 降低服务成本 其实 也并不一定真能省钱 虽然从短期来看 表面来看 确实暂时省去了一些软硬件资源的资金投入 如计算机 平台系统 语音设备等 但用于自建自用的呼叫中心所支出的软硬件资源都可以为自建型呼叫中心的企业今后工作的开展提供多方面的支持 是稳固的 可持续性的 也是可计入企业固定资产的 虽然在运行过程中自建的呼叫中心难免要调整 修改 但这种变动相对于先租赁 再重新自建呼叫中心的投入而言是微乎其微的 也就是说 一旦运营业务成熟的企业 呼叫中心是必不可少的

    2026年3月19日
    2
  • 镁光ssd管理工具 linux,SandForce主控固态硬盘SF-2241 vb2开卡成功经验「建议收藏」

    镁光ssd管理工具 linux,SandForce主控固态硬盘SF-2241 vb2开卡成功经验「建议收藏」一个威刚SP900128G固态硬盘坏了,想用开卡软件来修复,然后就必须知道是什么主控,于是拆开看里面SandForceSF2241VB2的主控芯片,flash看不懂600739095300463844,最后试出来是28044,MT29F128G08CFABBWP20MLCMicron镁光的。然后按量产网的SF2000开卡教程,开卡SandForce主控的ssd需要用到linux系统,于是…

    2022年6月22日
    103
  • html制作进销存,手把手教你定制属于自己的进销存软件

    html制作进销存,手把手教你定制属于自己的进销存软件接着上一步的继续来更新,上一步设置了入库单和出库单的选择录入问题下面来说一下入库单和出库单的数据保存转移问题在入库单和出库单分别插入两个按钮,然后再模块里写入一下代码Sub入库单录入()a=Sheet3.Range(“a65536”).End(xlUp).RowIfSheet3.Range(“b2”)=””ThenMsgBox”请选择录入供应商名称!”ExitSubEndI…

    2022年5月31日
    45
  • 算法-DFA算法-敏感词过滤算法(OC、Swift、Python)「建议收藏」

    前言前段时间,公司的IMSDK想做敏感词过滤,但是后端的小伙伴《比较忙》,在开产品需求会的时候想把敏感词过滤放到前端,让iOS、安卓自己搞,但是前端小伙伴写了一个方法来检测一段文本,耗时一两秒钟而且比较耗CPU,这样肯定不行的,最后后端小伙伴妥协了,把敏感词过滤放到后端了。一般的思路可能是遍历敏感词库,然后把一段文字的敏感词过滤掉,但是针对比较大的词库时(比如我们的敏感词库10万),这样非…

    2022年4月10日
    201
  • Android调用系统原生分享组件[通俗易懂]

    Android调用系统原生分享组件[通俗易懂]想必做Android开发都会遇到的需求——分享。当然实现的需求和方式的也都各自不一,有接入某个app的SDK进行分享,也有集成第三方平台的例如友盟等等…接下来所要说到的是Android系统提供的分享组件。分享组件能够自动的检索到可以分享app然后将分享内容带入 当然这个也会有所限制的,会有个别app只能分享单一项:“文字+图片”、“图片”、“文字” 好处就是轻量级、避免导入其它jar包或依赖、可减少apk体积Filefile=newFile(filePath

    2022年6月19日
    31
  • Verilog设计实例(6)基于Verilog的各种移位寄存器实现「建议收藏」

    Verilog设计实例(6)基于Verilog的各种移位寄存器实现「建议收藏」在数字电子产品中,移位寄存器是级联的触发器,其中一个触发器的输出引脚q连接到下一个触发器的数据输入引脚(d)。因为所有触发器都在同一时钟上工作,所以存储在移位寄存器中的位阵列将移位一个位置。

    2022年7月16日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号