不需要额外申请空间,从数组的第二个元素即 a[1]开始,将其设为key

用key依次从后【key的前一个元素】比较,当key比当前值小时候,把当前值到Key原位置之间的元素依次向后移动一个单元。

key>=当前值以后,把key复制给当前值后面的值即可。

*保证了Key值之前的所有元素都是sorted的。

void InsertSort(int a[], int n)
{int i, j, key;for (i = 1; i < n; i++){j = i - 1;key = a[i];while (j >= 0 && key<a[j]){a[j + 1] = a[j];j--;}a[j + 1] = key;}
}

空间复杂度O(1);

时间复杂度:

    最好:数组为正序排序,只需要执行for循环,因为key>a[j],直接执行a[j+1]=key即可——O(n)

    最坏:逆序,for+while=O(n^2)

平均就是O(n^2)【对于随机排序的数组,移动和比较次数更接近最坏情况】

稳定:

key<a[j]保证了稳定性

//0305复习,有点蒙来着1、忘记设置key2、寻找j--的时候以及向后移动的时候用了两个循环竟然。。一个就完全可以做到,可以边寻找边移动因为没写明白所以时间复杂度也没分析对。。

//0314复习。基本语句可以写出来,0305出现的问题2也记得了,可惜1 依然忘记设置key.会被覆盖的呀

转载于:https://www.cnblogs.com/Cherrylalala/p/6477239.html

DSA——直接插入排序笔记相关推荐

  1. 数据结构与算法-《开篇》

    数据结构与算法-概述-笔记整理<一> 数据结构与算法-数组与稀疏数组-笔记整理<二> 数据结构与算法-队列实现-笔记整理<三> 数据结构与算法-链表-笔记整理< ...

  2. 数据结构源码笔记(C语言):希尔插入排序

    //实现希尔插入排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; ty ...

  3. 数据结构源码笔记(C语言):直接插入排序

    //实现直接插入排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...

  4. 【数据结构笔记45】通过中间步骤区分简单插入排序和归并排序

    本次笔记内容: 习题-IOM.1 插入排序的判断 习题-IOM.2 归并段的判断 文章目录 题意理解 捏软柿子算法(判断是否是插入排序) 判断归并段的长度 错误的想法 一个正确的想法 其他测试数据-最 ...

  5. 【数据结构笔记32】排序算法概述、简单排序(冒泡排序、插入排序)、逆序对

    本次笔记内容: 9.1.1 概述 9.1.2 冒泡排序 9.1.3 插入排序 9.1.4 时间复杂度下界 文章目录 排序算法前提条件 冒泡排序 插入排序 时间复杂度下界 逆序对(inversion) ...

  6. Eva 初学算法笔记 —— 1.直接插入排序

    Eva 初学算法笔记  ---  1.直接插入排序 引言: 上一年专业开设了<数据结构与算法>这门课程,但当时没有认真学.过了之后发现自己对于那些基本的经典算法都忘得差不多了,大学剩下的日 ...

  7. (学习笔记 红书)——插入排序(1)

    今天开始学习<算法设计分析与实现从入门到精通(C\C++和Java)>. 我又开了个大坑...想起来我以前挖的C++ Primer的坑还没填完呢... <算法设计分析与实现从入门到精 ...

  8. 算法笔记1-排序-插入排序

    插入排序的工作方式就像排序一手扑克牌.开始时,我们的左手为空,然后,我们每次从桌上拿走一张牌并将它插入到左手中正确的位置.为了找到正确的位置,我们总是从右到左将它与左手中的每张牌进行比较.这样,左手中 ...

  9. 数据结构与算法笔记(八)—— 插入排序

    什么是插入排序 插入排序(英语: Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现 ...

最新文章

  1. C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结
  2. test argument is not supported anymore. Use chainer.using_config
  3. gateway集成sentinel实现网关限流
  4. Spring Boot整合Mybatis-Plus 增删改查+ 分页基本使用完整示例
  5. bim建筑绘图计算机要求,BIM考试报名条件:想要成为一级BIM建模师需要达到哪些要求?...
  6. python 代码格式规范脚本_Python编码规范
  7. 《Python Cookbook 3rd》笔记(5.2):打印输出至文件中
  8. 如何帮助金融客户“用好云”?
  9. spring Autowired(required = false) 说明
  10. Netty工作笔记0040---Netty入门--服务端1
  11. Linux查看磁盘块大小
  12. 操作系统编写之引导扇区 1
  13. 第一章:x264视频制作meGUI工具下载
  14. mapxtreme java_MapXtreme Java
  15. 解读swarm最新资讯,主网8.2号开始产BZZ
  16. 职称计算机萧山考点地址,杭州各科目考点一览表(地址+考试时间+电话)
  17. Linux常见Bug解决方案
  18. 两个圆公切线求法_两圆公切线长的公式求法
  19. Spring之IOC概念、Bean对象创建及DI注入的三种方式
  20. Vertiv发布2017年数据中心基础架构趋势

热门文章

  1. pytorch dropout代码解读
  2. Numpy的使用(3)
  3. linux文件自动改名,C#如何在生成文件夹或者文件时候自动重命名
  4. c语言 malloc_C语言数据结构 | 第一讲
  5. 基于python+opencv的图像目标区域自动提取
  6. anaconda虚拟环境python升级_使用Anaconda虚拟环境管理Python版本
  7. python用户取消了安装_python的安装
  8. 主成分分析、因子分析和聚类分析的区别
  9. [HTML5实现人工智能]小游戏《井字棋》发布,据说IQ上200才能赢
  10. java 对象值拷贝_Java 值传递与对象拷贝