一、插入排序的原理

插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)O(1)O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素腾出空间。

下面是插入排序的示例动画:

二、C++代码实现

// 功能:实现对int数组按升序排序
// 参数:
//   data: int数组
//      n: 数组元素的个数
// 返回值:
//   无
//
void InsertionSort(int data[], int n) {for (int i = 1; i < n; i++) { // 假定第一个元素为已排序序列,所以下标从1开始int temp = data[i];int j = i; // j表示腾出的位置// 因为依次和前一个元素比较,所以是j > 0,而不是j >= 0。// 从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素腾出位置for (; j > 0; j--) { if (data[j - 1] > temp) {data[j] = data[j - 1];}else {break;}}if(j != i)data[j] = temp;}
}

常用算法简述 -- 插入排序相关推荐

  1. 常用算法简述 -- 冒泡排序

    写在前面 排序算法种类繁多,根据处理的数据规模与存储特点,可分为内部排序和外部排序:前者处理的数据规模不大,内存足以容纳:后者处理的数据规模较大,必须将数据存放于外部存储器中,每次排序的时候需要访问外 ...

  2. C/C++程序基础 (九)排序算法简述

    排序算法 算法复杂度 算法简述 插入排序 N2 前方有序,依次将后方无序数据插入前方合适位置. 冒泡排序 N2 前方有序,从后方两两比较,将最小泡冒到前方. 选择排序 N2 前方有序,从后方选择最小的 ...

  3. 插入排序 php,常用的排序算法(二)--插入排序(PHP实现)

    常用的排序算法系列 插入排序 插入排序是一种逻辑上非常好理解的排序方式,整个排序的核心就是不断在当前已经排好部分数据的数组里,找到合适的位置插入新数据.就像抓扑克牌,抓一张,然后再手里已经部分已经排好 ...

  4. java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...

    本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...

  5. 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

    这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...

  6. 经典常用算法/常用算法思维---附伪代码以及实现

    本篇文章旨在分享一些常用算法的伪代码以及部分算法的具体实现,后面也会更新我在刷算法题中学到的或者从别的地方看到的经典算法思维 本博客并不提供算法说明,算法证明,算法分析,算法测试等内容,只提供算法的伪 ...

  7. 数据分析与挖掘理论-常用算法对比(纯理论较枯燥)

    常见数据挖掘算法分析 概述 一般认为,数据挖掘领域所使用的方法均属于机器学习算法.深度学习算法和数据挖掘算法. 一般认为,数据挖掘领域的问题主要有分类.回归.聚类.推荐.图像识别.预测. 一般认为,数 ...

  8. c++ 单例模式_Java面试题总结之设计模式、网络基础、常用算法

    一.设计模式 1.单例模式 A.懒汉式 单例模式最简单的实现发现,但是不支持多线程,线程不安全 如果想线程安全,在方法上加上synchronized就可以,不过这样效率低下,99%情况都不会用到 pu ...

  9. JavaScript数据结构和算法简述——数组

    为什么先讲数组 数据结构可以简单的被分为线性结构和非线性结构. 线性结构大致包括: 数组(连续存储): 链表(离散存储): 栈(线性结构常见应用,由链表或数组增删和改进功能实现): 队列(线性结构常见 ...

最新文章

  1. CVPR2020论文解读:CNN合成的图片鉴别
  2. MIT教授Tomaso Poggio演讲与专访:智能背后的科学与工程 | 腾讯AI Lab学术论坛
  3. TypeScript Type Innference(类型推断)
  4. Tomcat【环境搭建 01】安装包版本说明+安装+参数配置+启动(JDK11+最新版apache-tomcat-10.0.12)
  5. 181. maven项目ssm(父工程 子工程)
  6. 动态规划基础水题提纲
  7. 为什么有的人开车舍不得开空调?车载空调耗油吗?
  8. ROS2——Win10上的rqt_graph无法正常运行
  9. cf修改游戏客户端是什么意思_cf游戏客户端是什么
  10. 干货——IT项目管理之软件测试
  11. uni-app上传图片base64
  12. V语言(Vlang)初探
  13. JS提示缺少对象的一种解决办法
  14. 字节跳动2020春招后端开发工程师笔试复盘
  15. 写给那些冷门专业的大学生,敢问出路在何方?
  16. Cesium3DTileset任意面裁剪,压平,水印效果
  17. linux使用rdesktop-vrdp进行远程连接
  18. 如何采用PageAdmin自助建站系统来进行企业网站建设
  19. 我的世界java版是什么_Java版我的世界版本介绍
  20. vue-cli2.9.6及其他版本升级至vue-cli4.x最新版

热门文章

  1. java 集成 atlas
  2. imatest测试分辨率使用教程
  3. 微信 H5 页面前端开发,大多数人都会遇到的几个兼容性坑
  4. SQUID工作原理是什么
  5. Android 集成友盟推送方案(1)
  6. iOS RSA加密 以及生成公钥 秘钥 pem文件
  7. 科技百咖 | 探迹科技:让天下没有难做的销售
  8. D2FQ: Device-Direct Fair Queueing for NVMe SSDs
  9. DOM中的node(节点)有关的三个属性--nodeType、nodeName、nodeValue
  10. springboot报错(三) webjars被拦截或找不到