直接插入排序-java
直接插入排序-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相关推荐
- 插入排序算法 java_排序算法实现-插入排序(Java版本)
原标题:排序算法实现-插入排序(Java版本) 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到 ...
- 插入排序Java代码实现
插入排序Java代码实现 package ch02;public class InsertSort { public static void sort(long[] arr){long tmp =0; ...
- 插入排序--Java
插入排序: 原理: 1.把所有的元素分为两组,已经排序的和未排序的 2.找到未排序的组中的第一个元素,向已经排序的组中进行插入 3.倒叙遍历已经排序的元素,依次和待插叙的元素进行比较,直到找到一个元素 ...
- 数据结构之二分插入排序------java实现
package com.cn.hbut.daoImpl;/*** @author Administrator* 直接插入排序**/ public class InsertSort {//直接插入排序/ ...
- 插入排序java_排序算法之直接插入排序Java实现
排序算法之直接插入排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb 选择排序:http://t.cn/hros6e 插入排序:ht ...
- 排序算法之插入排序--Java语言
插入排序是一种简单且有效的比较排序算法.在每次迭代过程中算法从输入序列中移除一个元素,并将该元素插入待排序序列的正确位置.重复该过程,直到所有输入元素都被选择一次. 算法优点: a.实现简单 b.数据 ...
- Java数据结构与算法——插入排序
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,ja ...
- java插入排序_Java程序要插入排序
java插入排序 Java程序插入示例的排序. 显示了示例仿真以及时间复杂度. 插入排序是一种简单的排序算法,可以一次构建一个最终的排序数组(或列表). 它比冒泡排序有效得多,并且在大型列表上的效率比 ...
- java中插入排序_Java中的插入排序
java中插入排序 Today we will look into the Insertion Sort Java program. Insertion sort is similar to Bubb ...
- 简单排序:直接插入排序
直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表.开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无 ...
最新文章
- 开源大数据引擎:Greenplum 数据库架构分析
- 把HTML转成PDF的4个方案及实现方法
- 剑指offer:栈的压入、弹出序列
- java打地鼠游戏-有背景音乐有图
- UVA 12166 Equilibrium Mobile
- 时间触发以太网TTEthernet技术
- Blazor 火了,不禁让人想起已死的Silverlight !
- oracle快速插入大量数据
- 前端学习(1041):todolist--html界面
- otc焊接机器人操作规范_「分享」超声波塑料焊接机的操作规范
- git 查看、创建、删除 本地,远程 分支
- MAC下ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
- mysql主从docker_(学习到实践)四、docker搭建mysql主从实践
- butterknife 配置了点击和绑定无效
- CTF入门指南(Capture the flag)
- mysql gtid 主键冲突_MySQL Last_SQL_Errno: 1062----经典错误,主键冲突
- ac1900 linksys 恢复_linksys思科WRT1900ACS刷机变砖维修
- 怎樣制作线段动画_PPT如何制作简易动画
- psd导出jpg太大_解决photoshop 储存PSD或jpg文件异常过大的方法
- P9 力荐!阿里巴巴最新出品 776 页 JDK 源码 + 并发核心原理解析小册