排序算法之插入排序

漫谈经典排序算法:二、各种插入排序解析及性能比较 1、序言 这是《漫谈经典排序算法系列》第二篇,解析了各种插入排序算法。主要包括:直接插入排序、折半插入排序、表插入排序、希尔插入排序。每一种算法的开头都叙述了引出该算法的原因,然后给出代码,最后分析算法效率及和其他插入排序相比,优劣在哪里。 各种排序算法的解析请参考如下: 阅读详情

思路

假设有一个长度为 nnn 的数组 aaa(a0⋯an−1a_0\cdots a_{n-1}a0​⋯an−1​),则插入排序执行过程如下:

  1. 先将 a0a_0a0​ 已经排好序的数组当中。
  2. 遍历 a1⋯an−1a_1\cdots a_{n-1}a1​⋯an−1​。
  3. 每次外层遍历时内层再用 aia_iai​ 从尾部遍历一遍已排好的数组。
  4. 若 aj>aia_j>a_iaj​>ai​ 则交换它们两个,否则退出内层遍历。此时可以保证 a0⋯aia_0\cdots a_ia0​⋯ai​ 是有序的。

代码

#include <iostream>
using namespace std;
int a[int(1e7)];
void InsertionSort(int *a, int n) {
	for (int i = 1; i < n; ++i) {
		int val = a[i];
		// 将a[i]插入有序序列a[0..i-1]
		int j = i - 1;
		while (j >= 0 && a[j] > val) a[j + 1] = a[j--]; // 将a[j]向后移动一位 
		a[j + 1] = val; // 插入a[i] 
	}
}
int main() {
	int n;
	cin >> n;
	for (int i = 0; i < n; ++i) cin >> a[i];
	InsertionSort(a, n);
	for (int i = 0; i < n; ++i) cout << a[i] << ' ';
	return 0;
}
直接插入排序算法之表插入排序详解 插入排序属于稳定排序法,是一种常用的排序算法。直接插入排序算法可以利用静态数组来实现,也可以使用静态链表或者单链表来实现。本文给出了直接插入算法的静态链表实现方法,即表插入排序算法。 基于静态链表实现直接插入排序,就是把待排序的数组放入静态链表中,通过修改静态链表中的索引域的值来给出排序结果。该排序方法不改变原数组中元素的位置,只是在索引域中给出其在排序表中位置,因此相比较于直接插入排序算法,本算法不需要移动元素。 阅读详情

相关推荐

sap 标准委外和工序委外_SAP PP 工序委外详解

在SAP里有外包和外协两种:外包:指把原材料发出去,扣减库存,然后供应商加工生产,最后再作为成品入库。主要是在MM模块下实现的。对应的英语叫Subcontracting。外协:一般是指某种工序外协,在工艺路线里设置某个工序为外协后,系统自动会产生一个采购订单,一般是指采购某种服务。采购回来后再继续本公司的其他工序。主要是在PP模块下实现的。对应的英语叫Processing。2.当有委外加工的业务流...

weixin_26849971的博客 4579

排序算法之插入排序C语言实现

插入排序 1、直接插入排序 算法思想:直接插入排序是无序序列插入到有序序列中,通常假定a[0]为已经排好序的子序列,然后将剩下无序序列一个一个插入到有序的子序列中。适用于基本有序和数据量不大的情况。 例如对于一个无序序列{45,32,56,71,12}来讲,首先确定45为有序的,然后在无序序列中向右遍历,32小于45则插入到45的前面,再继续往右遍历,56大于32同时也大于45则应该插入到45后面...

xiaobinbin2372的博客 1万+

当爬虫遇到TikTok滑块:一份给开发者的verifyV2避坑指南与调试心得

本文详细解析了TikTok滑块验证码verifyV2的破解与优化策略,涵盖验证码触发机制、滑块图片获取、验证请求构造及高级调试技巧。通过实战案例和代码示例,帮助开发者有效应对复杂反爬机制,提升验证通过率。特别针对verifyV2系统的加密算法和轨迹模拟提供了专业解决方案。

weixin_30919429的博客 641

排序算法1之插入排序

插入排序 排序算法作为互联网找工作的必考的问题,现在得补补了。之前对排序算法有一些了解,有些排序算法看起来比较简单,但是真要自己手写code也不是那么容易的。所以纸上得来终觉浅,绝知此事要躬行。 算法的三个特性 时间效率,一般情况,当然希望排序算法越快越好。一般排序算法能达到Ω(n)\Omega(n)的时间复杂度就已经非常好了 。 空间效率,受限于计算机的硬件条件,加上大数据处理问题日渐普

小羊哈利 536

Arduino创意作品实战案例:手把手教你做温控风扇

通过这个实用的arduino创意作品,轻松实现温度感应与风扇自动控制,结合传感器与编程逻辑,打造智能散热系统,是入门者理想的arduino创意作品实践项目。

weixin_42311427的博客 608

统一大型语言模型和知识图谱:路线图

大型语言模型(LLM),如ChatGPT和GPT4,由于其涌现能力和泛化性,正在自然语言处理和人工智能领域掀起新的浪潮。然而,LLM是黑箱模型,通常无法捕捉和获取事实知识。相反,知识图谱(KGs),例如维基百科和华普,是显式存储丰富事实知识的结构化知识模型。KGs可以通过为推理和可解释性提供外部知识来增强LLM。同时,KGs很难从本质上构建和演化,这对KGs中现有的生成新事实和表示未知知识的方法提出了挑战。因此,将LLM和KGs统一在一起并同时利用它们的优势是相辅相成的。

qq_32907491的博客 2842

python排序算法——插入排序

本文仅仅简单介绍了插入排序的理论知识,还通过代码更加直观的了解。插入排序算法是把给定数组中的元素依次插入到一个新的数组中,最终得到一个完整的有序数组。插入排序是一个稳定的排序算法。

阿极的博客 1669

从轻量化到高精度:3DXML 转 STP 的工程数据升级技术指南

本文详细解析了3DXML转STP格式的工程数据升级技术,对比了两种格式在轻量化和高精度方面的特性差异,并提供了CATIA、FreeCAD及Python编程等多种专业级转换方案。通过实际案例展示了如何确保转换过程中的数据精度,适用于CAD设计、精密制造等场景,帮助工程师实现工程数据的高效升级。

weixin_29201859的博客 215

排序算法学习——插入排序

分享插入排序的学习笔记

LiuYaoheng的博客 1253

光学设计仿真软件:Code V_(8).场曲和色差校正

通过以上步骤和代码示例,用户可以更好地理解如何在Code V中进行场曲和色差的校正。这些技术不仅有助于提高光学系统的成像质量,还可以为后续的光学设计提供重要的参考。在实际应用中,用户可以根据具体需求选择合适的校正方法和优化策略,以达到最佳设计效果。

kkchenjj的博客 1784

基于Matlab的自动泊车系统开发:利用模糊控制实现智能停车解决方案的详细教程

Matlab是一种广泛应用于科学计算、工程建模与仿真的编程语言,其强大的工具箱和简洁的编程语法,使其成为开发自动泊车系统的理想选择。在开始编写代码之前,我们需要搭建Matlab的工作环境,并熟悉相关的工具箱,如Fuzzy Logic Toolbox,用于实现模糊控制。首先,确保你已经安装了Matlab软件,并加载了必要的工具箱。接下来,我们将逐步讲解如何在Matlab中实现自动泊车系统。

qq_38334677的博客 663

排序算法——插入排序

houapple的记忆屋 915

Android功耗系列专题理论之十一:高通QCOM平台待机功耗问题分析方法

本文详细介绍了高通QCOM平台待机功耗问题的分析方法。首先强调测试环境标准化的重要性,包括关闭无线功能、日志记录和非必要传感器。重点分析了硬件连接检查、驱动配置验证、电源管理策略优化等关键步骤。文章详细讲解了射频校准、时钟源/中断分析、子系统状态检查等专业技术方法,并提供了具体的命令行操作示例。此外还介绍了外设拆解、外灌电压测试等硬件排查手段,以及功耗分解板、波形分析等高级诊断技术。最后强调了固件版本验证和环境因素测试的必要性,为工程师提供了系统性的功耗问题排查思路。

770

【排序算法】——插入排序

排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

2302_80243065的博客 1566

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

排序算法之——插入排序分析

前言 最简单的排序算法之一是插入排序(insertion sort)。 思路 插入排序的思路是这样的: 插入排序。由N-1趟排序完成,对于i=1到N-1趟,保证从位置0到位置i上的元素为已排序状态(但不保证已排序的值一定小于未排序的值)。 过程: 对于位置i,先把i位置的值保存起来,然后把i挖空。 依次与前一个位置比较,比较i-1到0位置上的元素; 若发现i对应的值小于某个位置的值,则将该位置的...

日积月累,天道酬勤 1585

pscad IEEE标准系统搭建说明

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

排序算法—————————————————插入排序

最近几天在学习这个数据结构算法相关的,首先学习到的一个排序的算法就是插入排序。排序在生活中是非常常见的,比如在网购中我们筛选商品会根据评论,购买数量,价格,等内容的排序去选择我们想要的商品。由此可见排序在我们的生活中是非常有用的。插入排序分为两个部分第一个是简单的的插入排序,第二个是希尔排序相对于简单的插入排序的一个优化!

2201_75943325的博客 152

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【排序算法】插入排序

文末有算法可视化哦~

weixin_50308184的博客 113

前端排序算法——插入排序

插入排序简介 简单来说,插入排序就是从头开始两两相比,直到遍历到末端; 这个排序算法一个明显的特点是,在排列过程中,前面的值是按顺序排好的,后面的值还是原来的样子,然后逐渐像前面的值那样变得有序; 先看一下在JS中是怎么实现的 插入排序 代码 function insertionSort(arr) { var len = arr.length; var preIndex, current; for (var i = 1; i < len; i++) { preI

TM_Godspeed的博客 455

排序算法之插入排序详解

1、基本介绍 插入式排序属于内部排序法,是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插...

∑ 1002

JavaScript的排序算法——插入排序

插入排序(Insertion Sort) 插入排序是一种简单的排序算法,这种算法可以一次构建最终排序的数组(或数列)。它在大型数列上的排序效率会远低于一些更高级的排序算法,如快速排序、堆排序、归并排序。 中心思想:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 编码实现: function insertionSort(arr){ var ne...

coding 616

排序算法总结(1)——插入排序

排序算法的重要性对于学计算机的童鞋来说是不言而喻的,不管是找工作还是考研,那是笔试必考面试必问!偏偏排序算法多,很容易混淆记不住。我以前也做过总结, 总在写在纸上,过一两个月不看又忘光了,故在此写一篇总结,一是为自己留着,二是为其他有需要的人可以做参考。有错误或改进的地方欢迎留言。 废话少说。本文主要总结各种数据结构参考资料上都能见到的常用算法。 主要分为插入排序、交换排序、选择排序、

徒步者 914
上一篇: 排序算法之冒泡排序
下一篇: 排序算法之归并排序
peter_code
博客等级 码龄5年 41粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值