原理

通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。相信大家都打过扑克牌,很好理解。

例子

将数组[5,6,3,1,8,7,2,4]进行从小到大排序

排序步骤:

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2~5

动画演示

代码参考

     static void Main(string[] args){int[] intArray = { 3, 6, 4, 2, 5, 1 };Insertion_Sort(intArray);foreach (var item in intArray){Console.WriteLine(item);}Console.ReadLine();}static void Insertion_Sort(int[] unsorted){int i, j, temp;for (i = 1; i < unsorted.Length; i++){// 检查有无序状态if (unsorted[i-1] > unsorted[i]){temp = unsorted[i];// 移位for (j = i; j > 0 && unsorted[j - 1] > temp; j--){unsorted[j] = unsorted[j - 1];}// 强势插入unsorted[j] = temp;}}}

参考资料

维基百科http://en.wikipedia.org/wiki/Insertion_sort

转载于:https://www.cnblogs.com/jackbase/p/4277335.html

基础算法之插入排序Insertion Sort相关推荐

  1. [转载] python实现基本算法之插入排序(Insertion Sort)

    参考链接: Python中的插入排序insertion sort 基本算法之插入排序(Insertion Sort) 基本算法-02.插入排序(Insertion Sort)算法 冒泡排序已经发布,大 ...

  2. python实现排序算法_python实现·十大排序算法之插入排序(Insertion Sort)

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

  3. python sort 逆序_python实现·十大排序算法之插入排序(Insertion Sort)

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

  4. C语言插入排序Insertion Sort算法(附完整源码)

    插入排序Insertion Sort算法 插入排序Insertion Sort算法的完整源码(定义,实现,main函数测试) 插入排序Insertion Sort算法的完整源码(定义,实现,main函 ...

  5. C语言以递归实现插入排序Insertion Sort算法(附完整源码)

    以递归实现插入排序Insertion Sort算法 以递归实现插入排序Insertion Sort算法的完整源码(定义,实现,main函数测试) 以递归实现插入排序Insertion Sort算法的完 ...

  6. 插入排序(Insertion Sort)-Java实现

    插入排序(Insertion Sort)算法简介: 插入排序是一种丛序列左端开始依次对数据进行排序的算法.在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据. 插入排序(Inserti ...

  7. 插入排序(Insertion Sort)

    维基百科:http://zh.wikipedia.org/wiki/插入排序 算法思想: 若数组A[n]的前n-1个数已经有序,我们只需把第n个元素插入到适当的位置即可.易分析得算法的时间复杂度为Ο( ...

  8. 插入排序Insertion sort 2

    原理类似桶排序,这里总是需要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数 例如 待排序数组[62,14,59,88,16]简单点五个数字 分 ...

  9. 基础算法之快速排序Quick Sort

    原理 快速排序(Quicksort)是对冒泡排序的一种改进. 从数列中挑出一个元素,称为"基准"(pivot); 排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的 ...

  10. 九大经典算法之插入排序、希尔排序

    01 插入排序(Insertion Sort) 原理:每次选择一个元素,并且将这个元素和整个数组中的所有元素进行比较,然后插入到合适的位置. void insertion_sort(int arr[] ...

最新文章

  1. Python 键盘鼠标监听
  2. 如何实现页面的响应式布局?
  3. 在看完《Programming in Lua》之后
  4. 数据中心机房谐波治理
  5. VTK:PolyData之RemoveVertices
  6. 从按下电源开关到bash提示符
  7. 如何在 ASP.NET Core MVC 5 中处理未知的 Action
  8. .net数据源控件绑定mysql_理解asp.net中DropDownList编辑数据源,绑定数据库数据。...
  9. C#LeetCode刷题之#674-最长连续递增序列( Longest Continuous Increasing Subsequence)
  10. 计算机发展史的内容概述,计算机及其发展史概述
  11. 《大型数据库技术》MySQL数据库安装配置及基础使用
  12. HDU 6183 2017广西邀请赛:Color it(线段树)
  13. 表单元素设置disabled后 支持点击事件
  14. Allegro gerber文件路径设定
  15. c语言调用aida64温度,关于aida64软件cpu温度的问题
  16. java求100以内偶数和
  17. python处理页眉_【python-docx 05】操作页眉和页脚
  18. Python -- 创建数字列表
  19. 计算机中b代表的含义是什么意思,表示文件大小的MB,KB,B等是什么意思?
  20. java毕业生设计在线教学质量评价系统计算机源码+系统+mysql+调试部署+lw

热门文章

  1. ORACLE自增字段创建方法
  2. PHP面向对象设计模式-姜海强-专题视频课程
  3. Android_(服务)Vibrator振动器
  4. 软件工程概论--课后作业1
  5. flash上传头像,截取图像 组件演示
  6. imx6 android power off
  7. Codeforces Round #354 (Div. 2) A. Nicholas and Permutation
  8. 方维团购系统二次开发,项目经验
  9. leetcode 杨辉三角 III
  10. SQL SERVER IDENTITY 约束的用法