排序算法-直接插入排序

直接插入排序算法详解 直接插入排序一、直接插入排序相关知识二、直接插入排序算法的执行流程三、具体代码与运行截图 一、直接插入排序相关知识 直接插入排序的思想是指:每次将一个待排序的元素按大小插入到前面己排好序的有序表中,直到全部元素排序完成。最开始默认当前有序表的第0个元素成为一个已经排序好的有序的子数组 直接插入排序的时间复杂度为O( n2 )。 二、直接插入排序算法的执行流程 假设待排序的序列是:38,55,-10,49,67,78,65,38,77,99。 假设初始的有序 序列是 有序表的第0个元素:38 。其他的都是 阅读详情

直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。

大致思路就是:把数组中的元素一个一个遍历一遍,寻找该元素应该插入的位置,使得数组有序。待遍历的元素都会用key值记录下来,方便插入操作。其实就是不断地比较、记录key、移位和插入的过程。

插入排序步骤

这里使用算法导论上的图片 ,数组A[6]={5,2,4,6,1,3},假设数组从1下标开始,易于讲解。

(a).比较A[1]和A[2]大小,A[2]>A[1],key记录A[2],于是把A[1]右移一位,key插入到A[1]的位置,这时A[1]和A[2]已经是一个已排好序的有序表了;

(b).比较A[3]和A[2]大小,A[3]>A[2],key记录A[3],A[2]右移一位,key>A[1],不需要移动了,key插入到A[2]的位置。

(c).比较A[4]和A[3]大小,A[4]>A[3],已经有序,跳过。

(d).比较A[5]和A[4]大小,A[4]>A[5],key记录A[5],A[4]右移一位,A[3]>key,A[3]右移一位,A[2]>key,右移一位,A[1]>key,右移一位,这时已经来到了数组顶部,所以直接插入,key插入到A[1]的位置。

(e).比较A[6]和A[5]大小,A[5]>A[6],key记录A[6],A[5]右移一位,A[4]>key,A[4]右移一位,A[3]>key,A[3]右移一位,key>A[2],所以A[3]就是应该插入的位置,key插入到A[3]的位置。

(f).数组排序完成。

代码如下:


#include <iostream>

using namespace std;

#include <cstdio>

void insert_sort(int a[], int len)

{

    a[0] = a[1];   //初始化key

    for(int i = 2; i <= len; i++)

    {

        if(a[i] < a[i-1])

        {

            a[0] = a[i];  //设置新的key

            a[i] = a[i-1]; //移位

            int j = i - 2;

            for(;a[j] > a[0]; j--)

            {

                a[j+1] = a[j]; //移位

            }

            a[j+1] = a[0];  //插入

        }

    } 



}

int main()

{

    int a[11];  //使用a[0]来充当key  

    for(int i = 1; i < 11; i++)

    {

        scanf("%d", &a[i]);

    }

    insert_sort(a, 10);

    for(int i = 1; i <= 10; i++)

    {

        printf("%d ", a[i]);

    }

    return 0;   

} 


该算法的最坏情况为O(n^2),最好情况为O(1)。

排序算法一:直接插入排序 在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。 阅读详情

相关推荐

r语言svr模型_R语言初探强化学习中的马尔可夫模型

强化学习大家这几年应该不陌生,从AlphaGo到AlphaZero让大家见识到了强化学习的力量。我们今天给大家介绍一个在强化学习中核心思维马尔可夫决策过程(MDP)。马尔科夫决策过程是基于马尔科夫论的随机动态系统的最优决策过程。它是马尔科夫过程与确定性的动态规划相结合的产物,故又称马尔科夫型随机动态规划,属于运筹学中数学规划的一个分支。今天我们给大家介绍下马尔可夫决策过程中用到一些算法以...

weixin_28994357的博客 1112

【pta作业 4】排序

6-1 折半插入排序6-2 冒泡排序6-3 快速排序稳定:冒泡排序、归并排序、基数排序不稳定:选择排序、希尔排序、快速排序、堆排序

weixin_61639349的博客 2563

劳特巴赫 Trace32 调试使用教程

详细介绍如何使用trace32进行调试

m0_56208280的博客 4万+

插入排序的几种算法

1.直接插入排序 直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。 一般情况下,第i趟直接插入排序的操作为:在含有i-1个记录的有序子序列r[1…i-1]中插入一个记录r[i]后,变成含有i个记录的有序子序列r[1…i];并且,和顺序查找类似,为了在查找插入位置的过程中避免数组下标出界,在r[0]处设置监视哨。在自i-1

宋常华的博客 965

【STM32G474实战】RS485通信的DMA优化策略与性能对比

本文深入探讨了在STM32G474微控制器上优化RS485通信的DMA策略。通过对比轮询、中断和DMA三种数据传输方式的代码实现与性能,揭示了DMA在解放CPU、降低占用率方面的巨大优势。文章提供了详细的DMA配置指南、高级应用技巧(如结合空闲中断)以及一个高可靠通信框架的实战思路,旨在帮助开发者构建高效、实时的工业控制系统。

weixin_29268331的博客 304

别再为环保数采仪通讯发愁!手把手教你用MCGS触摸屏+4G模块发送HJ212报文

本文详细介绍了如何使用MCGS触摸屏配合4G模块高效发送HJ212标准报文,解决工业环保监测中的数据采集与传输难题。从硬件连接到软件配置,再到报文组装与发送策略,提供全流程实用指南,特别针对4G网络环境下的特殊设置给出优化建议,帮助工程师提升数据传输稳定性与效率。

weixin_30847865的博客 389

排序算法(一)直接插入排序

直接插入排序是一种基本的插入排序方法,其基本操作是将第i个记录插入到前面第i-1个以排好序的记录中 给出下面这一组数据,要求按从小到大的顺序排序(当然,也可以将其按从小到大排序,这里只说一种) 12 34 5 62 20 45 32 我们先选定第一个数据,此时他是第一位,所以不需要进行其他的操作,我们第二位,他比12大,意识不需要进行任何操作,当我们看到第三...

weixin_44792333的博客 675

编译原理考试大题分析【太原理工大学】

看完本篇大题拿 85% 的分应该没问题,TYUT 太原理工大学编译原理期末考试。

m0_52861684的博客 1万+

1.直接插入排序(插入排序)

直接插入排序(Straight Insertion Sort) 是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。 排序过程如下:(参考自严蔚敏的数据结构(c语言版)) 思想是第一次将第一个元素当作有序组,每次后面的元素插入到有序组中使其任然有序,不断的扩大有序组,当所有元素都插入完成后,那么整体数组就是有序的。 直接插入排序的方...

qq_43808700的博客 1759

Google Earth Engine 红树林制图方法的代码(三个模块)

谷歌地球引擎红树林制图方法(GEM)提供了一种直观、易用且可复制的工具,适用于广泛的非专业沿海管理者和决策者。该工具全面回顾并整合了相关的红树林遥感文献,并利用云计算的力量,包括简化的基于图像的潮汐校准方法。GEM 可免费用于非营利用途,并在 GEE 中运行,包含全面且详细注释的代码。GEM 专门设计用于绘制全球范围内多日期红树林分布并量化其动态变化。目前可用的工具和方法未能充分利用沿海管理者通常持有的丰富地方专业知识——GEM 致力于填补这一空白,帮助结合地方专业知识与 GEE 的云计算能力。

此星光明博客 560

LeRobot X-VLA:首个适用于任意机器人、任意任务的软提示机器人基础模型

X-VLA是一种基于软提示的视觉-语言-动作模型,通过可学习嵌入向量编码不同机器人配置,实现跨平台统一控制。该框架采用两阶段训练:先在29万次多平台任务中学习通用策略,再通过微调少量参数(仅1%)适配新机器人。实验表明,0.9B参数的X-VLA在6个仿真和3个真实平台上表现优异,如LIBERO任务达93%成功率,布料折叠任务100%完成。其核心创新是将硬件差异视为"任务",用软提示引导Transformer处理异构数据,为机器人基础模型提供可扩展方案。

2506_90492529的博客 1241

插入排序

直接插入排序 直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增一的有序表。 整个排序过程为进行n-1趟插入,即:先将序列中的第一个记录看成是一个有序的子序列,然后从第二个记录起逐个进行插入,直至整个序列变成按关键字非递减有序序列为止。 JAVA代码实现: public static vo...

weixin_34202952的博客 152

【软考】数据库系统工程师备考指南(一)

目录一、数据库系统工程师简介二、考试要求三、考试目标四、考试范围(一)信息系统知识(二)数据库系统设计与管理 一、数据库系统工程师简介 数据库系统工程师考试属于全国计算机技术与软件专业技术资格(水平)考试(简称计算机软件水平资格考试)中的一个中级考试。考试不设学历与资历条件,也不论年龄和专业,考生可根据自己的技术水平选择合适的级别合适的资格,但一次考试只能报考一种资格。考试采用笔试形式,考试实行全国统一大纲、统一试题、统一时间、统一标准、统一证书的考试办法。笔试安排在一天之内。 2022 年数据库系统工程

邓邓子的博客 3860

排序算法 —— 直接插入排序(图文超详细)

java 实现七大排序算法中的直接插入排序

超烦豆先森 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

【排序算法篇】---直接插入排序

直接插入排序详细讲解

意疏的博客 2667

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

实现直接插入排序算法

/** *    实验题目: *        实现直接插入排序算法 *    实验目的: *        领会直接插入排序的过程和算法设计 *    实验内容: *        设计程序,实现直接插入排序算法。用相关数据进行测试,并 *    输出各趟的排序结果。 */ #include &lt;stdio.h&gt; #define MAX_LEN     (100)         ...

xiezhi123456的博客 6242

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

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

直接插入排序算法

直接插入排序是一种简单直观的排序算法,它的工作原理与人们打扑克牌时整理手牌的过程非常相似。当你摸到一张新的牌时,你会将它与你手中已经排序好的牌进行比较,找到合适的位置后插入,以保持整个手牌的顺序。这种排序算法的基本思想就是,通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

weixin_45710581的博客 1588

排序算法总结一(直接插入排序与希尔排序)

排序算法在编写代码的过程当中应用十分广泛,作用非常重要。它的作用就是将一个排序混乱的序列按照一定的规则排列有序。下面一张图基本可以清晰的表示排序算法的分类(有几个不常用的排序算法没有填写)。 今天就是总结一下八大主要的排序算法的使用范围,同时也从稳定性、时间复杂度、空间复杂度等方面分析一下这几个主要的排序算法。 所谓稳定性,就是在待排序的文件中,当存在多个关键字相同的记录时,经过排...

qq_38917783的博客 750

排序算法系列之直接插入排序

直接插入排序 1 基本原理 1 核心思想:插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 ,如此重复,直至完成序列排序。 2 算法分析: 1. 从序列第一个元素开始,该元素可以认为已经被排序 2. 取出下一个元素,设为待插入元素,在已经排序的元素序列中从后向前扫描,如果该元素(已排序)大于待插入元素,将...

胡小聪246的博客 6万+

排序算法之直接插入排序、希尔排序

一、直接插入排序(一种查找比较操作和记录移动操作交替地进行的方法) 1.思想:第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。 直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序是将待比...

Fiona20的博客 323

排序算法之——直接插入排序

直接插入排序直接插入排序简介直接插入排序算法的性能:直接插入排序代码(c++) 直接插入排序是属于插入排序的一种简单的方法。 给定一个数组array[]={2,4,6,1,3},对它进行升序排序。 直接插入排序简介 直接插入排序的方法就是每次将一个新数据插入到有序队列中的合适位置里。,定义可能看的不是很懂,下面从例子直接来说明。 原数组{2,4,6,1,3} (1)将数组中序列下标为0的元素视为个数为1的有序序列。 将4插入到[2]这个有序的序列之中去,因为2<4,所以插序之后的序列为[2,4,6,

Robert_Gordon的博客 423

[排序算法]直接插入排序

直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。实际中我们玩扑克牌时,就用了插入排序的思想。

2302_81044676的博客 2054

直接插入排序算法总结

1.直接插入排序算法原理 算法思想:每次将一个待排序的记录按其关键字大小插入到前面已排好的子序列中,知道全部记录插入完成。 2.具体算法 //第一部分:排序算法 //9-3 直接插入排序 //2020.09.22 //直接插入排序 void InsertSort(int A[],int n) { int i,j; int temp; for(i=1;i<n;i++)//将各元素插入已排好的序列中 { if(A[i]<A[i-1])//若A[i]的关键字小于前驱 { t

weixin_42534963的博客 518

常见排序算法之插入排序——直接插入排序、希尔排序

哈喽大家好,我是保护小周,本期为大家带来的是常见排序算法中的插入排序,主要有直接插入排序以及它的升级版——希尔排序,包您一看就会,快来试试吧~

保护小周ღ的博客 2749

排序算法之直接插入排序

基本思想:设置第一个为哨岗,后面一个比较,如果小,大的后移,如果大,插在后面, 然后再取下一个,再往序列里插,后往前比较 //直接插入排序算法的实现 //本算法是在参照严蔚敏教材的基础上,为实际运行需要加以改进 //为了学习需要,我们直接对整数数组进行排序操作,实际稍加修改可

浪飞 975
上一篇: 排序算法-快速排序
下一篇: 数据结构与算法学习-哈希表入门
UKey_
博客等级 码龄10年 258粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值