直接插入排序-java

转载请注明出处:http://blog.csdn.net/a740169405/article/details/50717749

思想:

插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。

循环实现:

/*** 插入排序(循环)* @param arr 数组*/
private static void insertSort(int[] arr) {int i = 1;  // 从第二个元素开始for (; i < arr.length; i++) {int tagNum = arr[i]; // 本次需要被插入的元素int j = i - 1;       // while循环的起点while (j >= 0 && tagNum < arr[j]) {// 当j>=0以及带插入的数比当前位置小,把当前数据往后移一位。arr[j + 1] = arr[j];j--;}arr[j + 1] = tagNum;// 直到找到比带插入小的数据,或者到达数组头部时,把数据插入。}
}

递归实现:

/*** 直接插入排序(递归)* @param arr 数组* @param index 需要插入的数字数组下标,从0开始*/
private static void insertSort(int[] arr, int index) {if (index < 0 || index >= arr.length) {return;}int tagNum = arr[index];int j = index - 1;while (j >= 0 && tagNum < arr[j]) {arr[j + 1] = arr[j];j--;}arr[j + 1] = tagNum;insertSort(arr, index + 1);  // 递归插入下一个元素
}

调用代码:

int[] arr = new int[] {1, 45, 78, 23, 12, 98, 150, 1, 45};
insertSort(arr);
System.out.println(Arrays.toString(arr));
int[] array = new int[] {2, 5, 90, 78, 12, 90, 67, 89, 2, 1};
insertSort(array, 0);
System.out.println(Arrays.toString(array));

结果:

复杂度分析:

最好:当数组已经是排好序的数组,此时不需要移动,只需要比较n-1次,去除常数项,复杂度为n
最坏:当数组是逆序的时候,复杂度最高,此时需要比较的次数为
记录的移动次数为
两者想加,得到的最高次幂为2次,去除常数项后,复杂度为n²
也就是说直接插入排序的复杂度为:n-n²

稳定性分析:

如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的

稳定性参考:http://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html

直接插入排序-java相关推荐

  1. 插入排序算法 java_排序算法实现-插入排序(Java版本)

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

  2. 插入排序Java代码实现

    插入排序Java代码实现 package ch02;public class InsertSort { public static void sort(long[] arr){long tmp =0; ...

  3. 插入排序--Java

    插入排序: 原理: 1.把所有的元素分为两组,已经排序的和未排序的 2.找到未排序的组中的第一个元素,向已经排序的组中进行插入 3.倒叙遍历已经排序的元素,依次和待插叙的元素进行比较,直到找到一个元素 ...

  4. 数据结构之二分插入排序------java实现

    package com.cn.hbut.daoImpl;/*** @author Administrator* 直接插入排序**/ public class InsertSort {//直接插入排序/ ...

  5. 插入排序java_排序算法之直接插入排序Java实现

    排序算法之直接插入排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb 选择排序:http://t.cn/hros6e 插入排序:ht ...

  6. 排序算法之插入排序--Java语言

    插入排序是一种简单且有效的比较排序算法.在每次迭代过程中算法从输入序列中移除一个元素,并将该元素插入待排序序列的正确位置.重复该过程,直到所有输入元素都被选择一次. 算法优点: a.实现简单 b.数据 ...

  7. Java数据结构与算法——插入排序

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,ja ...

  8. java插入排序_Java程序要插入排序

    java插入排序 Java程序插入示例的排序. 显示了示例仿真以及时间复杂度. 插入排序是一种简单的排序算法,可以一次构建一个最终的排序数组(或列表). 它比冒泡排序有效得多,并且在大型列表上的效率比 ...

  9. java中插入排序_Java中的插入排序

    java中插入排序 Today we will look into the Insertion Sort Java program. Insertion sort is similar to Bubb ...

  10. 简单排序:直接插入排序

    直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表.开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无 ...

最新文章

  1. 开源大数据引擎:Greenplum 数据库架构分析
  2. 把HTML转成PDF的4个方案及实现方法
  3. 剑指offer:栈的压入、弹出序列
  4. java打地鼠游戏-有背景音乐有图
  5. UVA 12166 Equilibrium Mobile
  6. 时间触发以太网TTEthernet技术
  7. Blazor 火了,不禁让人想起已死的Silverlight !
  8. oracle快速插入大量数据
  9. 前端学习(1041):todolist--html界面
  10. otc焊接机器人操作规范_「分享」超声波塑料焊接机的操作规范
  11. git 查看、创建、删除 本地,远程 分支
  12. MAC下ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  13. mysql主从docker_(学习到实践)四、docker搭建mysql主从实践
  14. butterknife 配置了点击和绑定无效
  15. CTF入门指南(Capture the flag)
  16. mysql gtid 主键冲突_MySQL Last_SQL_Errno: 1062----经典错误,主键冲突
  17. ac1900 linksys 恢复_linksys思科WRT1900ACS刷机变砖维修
  18. 怎樣制作线段动画_PPT如何制作简易动画
  19. psd导出jpg太大_解决photoshop 储存PSD或jpg文件异常过大的方法
  20. P9 力荐!阿里巴巴最新出品 776 页 JDK 源码 + 并发核心原理解析小册

热门文章

  1. 【Gym-10167】Is-A,Has-A, Who Knowz-A【图的连通性】
  2. 卡方分布的latex代码
  3. django使用ajax传输数据
  4. kafka 的经典教程
  5. ResNet----残差结构
  6. sql常识- UNIQUE
  7. [算法]数组排序之后相邻数的最大差值
  8. 1001.A+B Format (20)(思路,bug发现及其修改,提交记录)
  9. Oracle ERP Interface堵住--Request Running too long time,查找Request执行的Sql
  10. 小心Java中封装类的值比较