直接插入排序

简介: 直接插入排序

基本思想:


      直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止 ,得到一个新的有序序列。 这样的排序我们就叫做插入排序。插入排序是一种很常见的排序,例如,我们平时打牌的时候逐张摸牌并且整理牌的过程就是利用的直接插入排序。



  (升序)实现的思路就是:给定一个数组,我们认为第一个数就是有序的,然后从第二个数开始往前进行插入排序,往前插入排序的过程就是比较和挪动数据的过程,先保存需要插入的这个数,防止挪动数的时候被覆盖,然后用这个需要插入的数逐一和它前面的数进行比较,如果比前一个数小,就把前一个数往后挪动一位,腾出空间,再和前一个数的前一个进行比较,以此类推,直到找到待插入的数比前一个数大或者相等就停止,那么找到的这个位置的下一个位置就是待插入数据的位置,然后就插入即可。


以下是插入排序的演示动图:



   显然,对于N个数的数组,如果数组本身是顺序有序的话,也就是每一个数据的插入都不需要挪动数据,那它的时间复杂度是O(N)的,当然,这只是它最好的情况,最坏的情况是这个数组逆序有序,那挪动数据的次数就是一个等差数列求和,时间复杂度为O(N^2),所以综合起来这个直接插入排序的时间复杂度为O(N^2)。


参考代码:


//给定一个数组a,并给出数组的大小n
void InsertSort(int* a, int n)
{
  int end = 0;
  int tmp = 0;
  int i = 0;
  for (i = 0; i < n - 1; i++)
  {
    end = i ;//end位置为i
    tmp = a[end + 1];//则需要插入的数的位置为end+1,即end的后一个
    //tmp这个待插入的数与从end开始往前直到0的数比较,直到找到比tmp小的数就break;
    while (end >= 0)
    {
      if (tmp < a[end])
      {
        a[end + 1] = a[end];
        --end;
      }
      else
      {
        break;
      }
    }
    //来到这里无论是break跳出循环还是while循环结束跳出循环,tmp都是
    // 放在end+1的位置上,while循环结束跳出的话就是把tmp插入到第一个
    // 位置,break跳出是插入到中间位置或者最后一个位置
    a[end + 1] = tmp;
  }
}


直接插入排序的特性总结:


1. 元素集合越接近有序,直接插入排序算法的时间效率越高


2. 时间复杂度:O(N^2)


3. 空间复杂度:O(1),它是一种稳定的排序算法


4. 稳定性:稳定

相关文章
|
3月前
|
机器学习/深度学习 人工智能 弹性计算
阿里云优惠券有哪些?优惠券种类、领取地址与使用规则,使用教程参考
阿里云优惠券分为代金券、满减券和折扣券三种类型,按适用范围分为通用券和指定商品券,可通过官网权益中心领取,每个账号最多持有50张有效券。主要种类包括:AI加速季权益礼包(个人360元/企业1728元满减券包)、百炼先用后返券(达标返200元)、企业迁云补贴(总额5亿元,需提供消费凭证,有效期至2026年底)、学生300元无门槛券(云工开物计划,每年一张)。使用时,预付费订单在结算页手动勾选,按量付费账单自动抵扣,单笔订单限用一张,不可与其他优惠叠加。
阿里云优惠券有哪些?优惠券种类、领取地址与使用规则,使用教程参考
|
9月前
|
存储 自然语言处理 数据库
RAG(检索增强生成)技术简介
RAG(检索增强生成)通过结合信息检索与文本生成,提升大模型回答的准确性与时效性。它利用向量数据库实现语义检索,支持智能客服、医疗诊断、法律咨询等场景,解决知识更新难、专业性不足等问题,并以“按需取用”机制突破上下文限制,兼顾效率与隐私。
1223 4
|
12月前
|
关系型数据库 MySQL Unix
MySQL中日期和时间函数的使用指南
使用这些函数可以有效地处理和分析日期和时间数据,对于数据库管理、报表生成和数据分析非常关键。在实际应用中,根据具体需求选择适当的函数进行数据处理,可以极大地提高数据处理的效率和准确性。
618 17
|
应用服务中间件 nginx 数据安全/隐私保护
安装Nginx报错:make: *** 没有规则可以创建“default”需要的目标“build”。 停止。
安装Nginx报错:make: *** 没有规则可以创建“default”需要的目标“build”。 停止。
1195 0
|
Kubernetes 安全 Cloud Native
Confidential Containers:云原生机密计算基础设施
后续将基于RunD安全容器打造更完整的机密容器技术,包含支持更多的 HW-TEE 平台,以及构建更完备的机密容器支持能力。
Confidential Containers:云原生机密计算基础设施
|
缓存 监控 网络协议
移动端常见白屏问题优化之网络优化篇
本文将要分享的是得物技术团队针对移动端最常见的图片加载导致的端侧白屏问题,而进行的的移动网络方向的技术优化实践,希望能带给你启发。
654 2
移动端常见白屏问题优化之网络优化篇
|
JavaScript 前端开发
js_Ipv4以及ipv4段正则校验
几种JavaScript正则表达式,用于校验IPv4地址的有效性,包括支持CIDR表示法的变体。
503 4
|
前端开发 计算机视觉 Python
flask+python 实时视频流输出到前台
该文章介绍了如何使用Flask和Python实现实时视频流输出到网页前端,包括后端通过OpenCV捕获摄像头视频流、处理并编码为JPEG格式,然后以HTTP响应的形式发送给前端显示的完整示例代码和运行效果。
flask+python 实时视频流输出到前台
|
人工智能 供应链 安全
万字讲透:军工企业数字化转型转什么,如何做?
随着国防现代化目标的提出,军工行业景气度加速上升,企业纷纷扩产以满足新型装备加速列装的需求。航天科工集团的航天云网和中国电科的“数字电科”等项目展示了数字化转型的成效,如缩短研发周期、提高生产效率和降低成本。数字化转型对军工企业至关重要,能提升生产关系、增强竞争力,并实现生产制造和供应链的智能化。然而,转型面临挑战,包括传统认知边界、商业模式创新、技术合作共享、人才短缺和观念体制障碍。企业需制定数字化战略规划,重构组织与流程,加强网络安全,并确保人才和技术保障。案例显示,低代码平台如织信Informat可助力企业实现国产化、灵活的战略部署和数字化转型。

热门文章

最新文章