插入排序:

 public void sort(){int in,out,temp;for(out=1;out<nElements;out++){temp = arr[out];in = out;while(in>0&&arr[in-1]>=temp){arr[in] = arr[in-1];//待插入的数据比其之前的数字大的右移,从小到大排序--in;//依次左移}arr[in] = temp;//直到遇到比temp小的,将temp插入}}

大多数情况下,插入排序是简单排序中最好的一种,时间复杂度仍为O(N^2),但在一般情况下比冒泡快一倍,比选择还要快一些。

先将下标为1的数组元素放入temp,从移走的元素(放到temp)处,向左比较:

将下标为1的数组元素放入temp:

从空处向左比较,为temp找合适的插入点:

outer右移,指向下一个待插入的元素,将其放入temp:

排序完成:

完整代码:

package TwoArray;/*** 插入排序   将待排序的一个一个放入temp,与所处位置之前的数值比较,一个个插入* 将数组下标1的值作为分界点,暂存在临时变量temp,temp依次与左边的比较若左边in的比其大,将左边比其大的依次右移,直到遇到比其小的腾出一个空位* 插入这个空位,in一直指向空位位置,out一直右移指向下一个待插入的元素。大多数情况下,插入排序是简单排序中最好的一种,时间复杂度O(N^2)* @author zhic**/
public class InsertionSort {int[] arr;int nElements;public InsertionSort(int max){arr = new int[max];nElements = 0;}public void insert(int value){arr[nElements] = value;nElements++;}public void display(){for(int i=0;i<nElements;i++){System.out.print(arr[i] + " ");}}public void swap(int one,int two){int temp = arr[one];arr[one] = arr[two];arr[two] = temp;}public void sort(){int in,out,temp;for(out=1;out<nElements;out++){temp = arr[out];in = out;while(in>0&&arr[in-1]>=temp){arr[in] = arr[in-1];//待插入的数据比其之前的数字大的右移,从小到大排序--in;//依次左移}arr[in] = temp;//直到遇到比temp小的,将temp插入}}public static void main(String[] args){InsertionSort arr = new InsertionSort(15);arr.insert(10);arr.insert(40);arr.insert(0);arr.insert(20);arr.insert(2);arr.insert(1);arr.insert(5);arr.insert(14);arr.insert(70);arr.insert(11);arr.display();System.out.println();arr.sort();arr.display();}
}

简单排序--插入排序相关推荐

  1. TZC 1283: 简单排序 —— 插入排序

    我们以TZC 1283为例简单说明一下排序(含十大经典排序算法)的python实现方法和C实现方法.冒泡排序原理请参见:https://zhuanlan.zhihu.com/p/122293204 或 ...

  2. iOS程序员也要学点算法吧 简单排序之插入排序

    进入到简单排序的第三个排序,插入排序.其实插入排序,和冒泡,还有选择排序都是比较排序算法的一种,比较效率基本也是O(N²) 但是插入排序,效率基本比冒泡快一倍,选择快一点. 有一个已经有序的数据序列, ...

  3. python sort 部分元素_Python 简单排序算法-选择、冒泡、插入排序实现

    写文章主要是记录自己每天学习的东西,本篇文章主要介绍数据结构中常用的简单的排序算法,虽然这些算法用Python实现起来不是十分的高效,不如c.java之类的运行速度快,应用Python实现主要是为了: ...

  4. 【简单排序算法】:简单选择排序、直接插入排序和冒泡排序

    [简单排序算法]:简单选择排序.直接插入排序和冒泡排序 简单选择排序: 原理:设所排序序列的记录个数为n.i取1,2,-,n-1,每次从所有n-i+1个记录(Ri,Ri+1,-,Rn)中找出最小的记录 ...

  5. 简单排序算法时间空间复杂度分析及应用(4)-二分插入排序

    简单排序算法时间空间复杂度分析及应用(4)-二分插入排序 背景: 顾名思义,这个二分插入排序是直接插入排序的进化版,主要变化的地方就是在内循环部分,即外循环的循环节点在确定区域的位置查询方式由原来的直 ...

  6. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  7. HDU1040简单排序题

    简单排序直接上代码:总共使用了九种方法解决这道题 方法一: #include<iostream> #include<algorithm> #include<cmath&g ...

  8. 算法:三种简单排序算法

    排序算法比較常见的有:冒泡排序.简单选择排序.直接插入排序:希尔排序.堆排序.归并排序和高速排序算法等. 今天先学习一下前面三种比較简单的算法.排序的相关概念: ①排序的稳定性:两个或多个元素相等.排 ...

  9. C#实现(递归和非递归)快速排序和简单排序

    C#实现(递归和非递归)快速排序和简单排序 本人因为最近工作用到了一些排序算法,就把几个简单的排序算法,想冒泡排序,选择排序,插入排序,奇偶排序和快速排序等整理了出来,代码用C#代码实现,并且通过了测 ...

最新文章

  1. Python设计模式-备忘录模式
  2. 八、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(中)
  3. php接收arduino向服务器发来的请求
  4. 22课时、19大主题,CS 231n进阶版课程视频上线!
  5. 配置生产环境加路径 /开发环境
  6. 后台取值页面显示——Vue.js
  7. 最适合晚上睡不着看的 8 个网站,建议收藏哦
  8. ASP.NET 2.0运行原理及其过程简要分析
  9. Python学习笔记--CSV模块读写数据(转)
  10. excel如何批量查询手机号归属地
  11. 【干货】消费金融助贷业务实操全速览
  12. sql语句之delete
  13. SVN插件 for VS--VisualSVN
  14. Python matplotlib 通过 plt.scatter画空心圆标记出特定的点
  15. 高通8996启动流程-3. sbl1启动流程
  16. 灵魂拷问:如何检查Java数组中是否包含某个值 ?
  17. 三王乱战孙宇晨背后:我们需要一场的区块链真理大辩论
  18. 金色耶路撒冷 感受圣城之圣
  19. Java实现抢红包程序
  20. javaspring面试题及答案,你还看不明白?

热门文章

  1. HH SaaS电商系统移动端商城,买家选择商品规格的交互设计
  2. android申请权限一次性申请多个,android 6.0以上动态一次申请多个权限-最美解决方案...
  3. mvc @html.editorfor,在MVC中,@Html.EditorFor(m = ( )_CSharp_开发99编程知识库
  4. 计算机控制cs,计算机控制
  5. tomcat截取日志_Tomcat的日志分割三种方法
  6. java第二章复习_JAVA第二章知识点
  7. linux 读取内存颗粒,Linux虚拟内存地址转化成物理内存地址
  8. [渝粤教育] 湘潭大学 土力学 参考 资料
  9. 【渝粤教育】国家开放大学2019年春季 1062文学英语赏析 参考试题
  10. 【渝粤题库】广东开放大学 民事诉讼法学 形成性考核