插入排序:
以下面的数组arry 为例:
90 ,41 ,57 ,71 ,93 ,29 ,35 ,14 ,64 ,16

先以arry[0]为基准。
外层第一次循环:
定义临时变量temp = arry[1] = 41
第一次比较:
arry[1]与temp进行比较,arry[0]>temp,比较结果为:
90 ,90 ,57 ,71 ,93 ,29 ,35 ,14 ,64 ,16
然后将temp的值赋予arry[0],结果为:
41 ,90 ,57 ,71 ,93 ,29 ,35 ,14 ,64 ,16

外层第二次循环
定义临时变量temp = arry[2] = 57
第一次比较:
arry[1]与temp进行比较,arry[1]>temp,比较结果为:
41 ,90 ,90 ,71 ,93 ,29 ,35 ,14 ,64 ,16
第二次比较:
arry[0]与temp进行比较,arry[0]<temp,结果不变:
41 ,90 ,90 ,71 ,93 ,29 ,35 ,14 ,64 ,16
然后将temp的值赋予arry[1],结果为:
41 ,57 ,90 ,71 ,93 ,29 ,35 ,14 ,64 ,16

外层第三次循环
定义临时变量temp = arry[3] = 71
第一次比较:
arry[2]与temp进行比较,arry[2]>temp,比较结果为:
41 ,57 ,90 ,90 ,93 ,29 ,35 ,14 ,64 ,16
第二次比较:
arry[1]与temp进行比较,arry[1]<temp,结果不变:
41 ,57 ,90 ,90 ,93 ,29 ,35 ,14 ,64 ,16
第三次比较:
arry[0]与temp进行比较,arry[0]<temp,结果不变:
41 ,57 ,90 ,90 ,93 ,29 ,35 ,14 ,64 ,16
然后将temp的值赋予arry[2],结果为:
41 ,57 ,71 ,90 ,93 ,29 ,35 ,14 ,64 ,16

外层第五次循环:
定义临时变量temp = arry[5] = 29
第一次比较:
arry[4]与temp进行比较,arry[4]>temp,比较结果为:
41 ,57 ,71 ,90 ,93 ,93 ,35 ,14 ,64 ,16
第二次比较:
arry[3]与temp进行比较,arry[3]>temp,比较结果为:
41 ,57 ,71 ,90 ,90 ,93 ,35 ,14 ,64 ,16

第五次比较:
arry[0]与temp进行比较,arry[0]>temp,比较结果为:
41 ,41 ,57 ,71 ,90 ,93 ,35 ,14 ,64 ,16
然后将temp的值赋予arry[0],结果为:
29 ,41 ,57 ,71 ,90 ,93 ,35 ,14 ,64 ,16

最后结果为:
14 ,16 ,29 ,35 ,41 ,57 ,64 ,71 ,90 ,93

思想:
设置监视岗临时变量temp,将待插入的值赋予temp。设定开始查找的位置j,在数组中搜索,如果j-1位置上的数字比temp大,则将j位置上的值付给j-1,将数组向后推移,直到找到比temp小的数值,将值赋予j-1上。

代码实现如下:

public static void sort(int arr[]) {int j;for (int p = 1; p < arr.length; p++) {int temp = arr[p];for (j = p; j > 0 && temp < arr[j - 1]; j--) {arr[j] = arr[j - 1];}arr[j] = temp;}}

假设数组的长度为n,内层循环的次数为:
1+2+3+…+n-1=n(n-1)/2
该算法的时间复杂度为O(n^2)
空间复杂度为O(1).

插入排序(InsertingSort)相关推荐

  1. java 折半插入排序_[Java代码] Java实现直接插入排序和折半插入排序算法示例

    1 排序思想: 将待排序的记录Ri插入到已经排好序的记录R1,R2,--,R(N-1)中. 对于一个随机序列而言,就是从第二个元素开始,依次将这个元素插入到它之前的元素中的相应位置.它之前的元素已经排 ...

  2. 直接插入排序与希尔排序

    直接插入排序(Straight Insertion Sort):         一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的.记录数量增1的有序表. 原理图如 ...

  3. 排序算法之直接插入排序

    1.基本思想: 已知待排序列r[1...n],先将序列中的第一个记录看成是一个有序的子序列,然后从第二个记录起逐个进行插入,直至整个序列变成关键字非递减有序序列为止. 具体操作如下: (1)查找出r[ ...

  4. c语言 静态链表插入排序,数据结构C语言版 表插入排序

    西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...

  5. 插入排序,希尔排序,堆排序

    本文将介绍三种排序算法--插入排序,希尔排序,堆排序.本文所有例子都是使用升序 一.插入排序 算法思想 维护一个有序数组,将要插入的数据与有序数组自最后一个元素直到合适位置的数一一比较. eg: 有序 ...

  6. 问题 c: 插入排序_插入排序:它是什么,以及它如何工作

    问题 c: 插入排序 Insertion sort is a simple sorting algorithm for a small number of elements. 插入排序是一种针对少量元 ...

  7. 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  8. 三种基本排序的实现及其效率对比:冒泡排序、选择排序和插入排序

    1 public class ThreeTypesOfBaseSort { 2 // ========================== 三种基本排序的效率对比 ================== ...

  9. python插入排序演示源码

    工作闲暇时间,把写内容过程较好的内容段做个备份,下面的内容内容是关于python插入排序演示的内容,应该能对各朋友也有用处. def insert_sort(t): for i in xrange(l ...

最新文章

  1. “System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常。
  2. ios UI自动化测试
  3. MyEclipse Web 项目的图标和右键New菜单
  4. 固定资产增值和减值操作
  5. 奔图内部扫描错误13_现代浏览器内部揭秘(第三部分)
  6. Angular 应用级别的依赖 Fake
  7. ORACLE 各种闪回操作
  8. BHO插件操作IE浏览器,js调用C#方法
  9. java更改用户邮箱_git修改user.name 和user.email
  10. 利用Group Conv在单个CNN中实现集成学习
  11. 跑分cpu_英特尔Rocket Lake 8核心和16线程CPU跑分泄漏
  12. python实验报告代写_TensorFlow作业代写、代做Python程序语言作业、代写github课程作业、Python实验作业代写...
  13. JavaPoet 开源项目使用
  14. 经典排序算法总结与Python实现(下)
  15. Windows 开机启动时自动删除 Temp 文件夹下的临时文件
  16. python web py入门(1)-web.py简介和安装
  17. c语言位数组如何实现,C语言实现位数组(bit数组)与位数组的简单应用举例
  18. NFV落地开花,CT厂商渐获运营商青睐
  19. 最全软件测试面试题(经典)
  20. python处理时间序列_Python——Pandas 时间序列数据处理

热门文章

  1. Backup recovery备份和还原
  2. 毕设过程记录(web管理系统)
  3. 密码学数学基础——群、环、域
  4. github标准pull request提交流程
  5. mysql之联合索引
  6. PYTHON实现将一个文件夹下的名字满足条件的图片拷贝复制到另一个文件夹路径
  7. k8s pod基础概念
  8. 【Gradle】Starting a Gradle Daemon, 1 incompatible and 5 stopped Daemons could not be reused
  9. 自定义launcher预置widget无法跳入app,显示无法添加微件问题
  10. Java实战之管家婆记账系统(8)——添加账目界面及功能实现