直接插入排序(内部排序)
1 package com.trfizeng.insertionsort; 2 3 /** 4 * 5 * @author trfizeng 内部排序 插入排序 --- 直接插入排序(Straight Insertion Sort) 6 * 7 */ 8 public class StraightInsertionSort { 9 public static int[] straightInsertionSort(int[] array) { 10 // 对传来的待排序数组进行合法验证 11 if (array != null && array.length != 0) { 12 // 用来控制已排序好记录下标 13 int j = 0; 14 // i = 0 把第一个当作是有序记录,之后的全部看着无序记录 15 for (int i = 1; i < array.length; i++) { 16 // 后一个跟有序记录最后一个比较 17 if (array[i] < array[i - 1]) { 18 // 把比有序记录最后一个小的数复制一份作为要插到有序记录的数,因为在赋值的过程会丢失 19 int temp = array[i]; 20 // 覆盖掉这个作为要插的记录使之当前有序记录数 + 1 21 array[i] = array[i - 1]; 22 // 因为在上面已经比较过了和覆盖过,所有要去除这2个数 23 j = i - 2; 24 // 拿着这个要插的数跟有序记录一一对比,只要比当前有序记录最后一个小的就把这个数后挪一位,为了保证插入排序是稳定的,不能是<= 25 while (j >= 0 && temp < array[j]) { 26 // 使记录后移 27 array[j + 1] = array[j]; 28 // 比较过就除去,有序记录数 - 1 29 j--; 30 } 31 // 最后把要插的数插到该插的位置 32 array[j + 1] = temp; 33 } 34 } 35 } 36 return array; 37 } 38 }
View Code
1 package com.trfizeng.test; 2 3 import com.trfizeng.insertionsort.StraightInsertionSort; 4 5 /** 6 * 测试类 7 * 8 * @author trfizeng 9 * 10 */ 11 public class SortTest { 12 // 待排序数组 13 static int[] array = new int[] { 6, 1, 4, 10, 11, 8, 7, 1 }; 14 15 /** 16 * 直接插入排序法测试 17 */ 18 public static void straightInsertionSortTest() { 19 System.out.print("待排序数组:[ "); 20 for (int i = 0; i < array.length; i++) { 21 System.out.print(array[i] + " "); 22 } 23 System.out.print("] "); 24 25 array = StraightInsertionSort.straightInsertionSort(array); 26 System.out.print("排好序的数组:[ "); 27 for (int i = 0; i < array.length; i++) { 28 System.out.print(array[i] + " "); 29 } 30 System.out.print("]"); 31 } 32 33 public static void main(String[] args) { 34 SortTest.straightInsertionSortTest(); 35 36 } 37 }
View Code
转载于:https://www.cnblogs.com/trfizeng/p/4307725.html
直接插入排序(内部排序)相关推荐
- 10-1-直接插入排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第10章 内部排序 - 直接插入排序 --<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课 ...
- 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...
掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等). 数组高级以及Arrays(掌握) 排序方法 空间复杂度 时间复杂度 稳定性 插 入 排 序 ...
- 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)...
写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的随意序列,又一次排列成一个按keyword有序的序列.因此排序掌握各种排序算法很重要. 对以下介绍的各个排序,我们假定全部排 ...
- 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)...
转载请注明出处:http://blog.csdn.net/ns_code/article/details/20043459 前言 本来想将所有的内部排序总结为一篇博文,但是随着研究的深入,还是放弃 ...
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
- 对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。
题目要求: (1)对以下6种常用的内部排序算法进行比较:起泡排序.直接插入排序.简单选择排序.快速排序.希尔排序.堆排序. (2)待排序表的表长不小于100:其中的数据要用伪随机数产生程序产生:至少要 ...
- 内部排序算法的实现(插入排序、选择排序、交换排序、归并排序、计数排序)
目录 插入排序 直接插入排序 希尔排序 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序(递归) 三数取中 快速排序(hoera版) 快速排序(挖坑版) 快速排序(前后指针版) 快速排序非 ...
- 简单的选择排序(内部排序)
1 /** 2 * 3 */ 4 package com.trfizeng.selectionsort; 5 6 /** 7 * @author trfizeng 内部排序 选择排序-简单选择排序(S ...
- 超详细!各种内部排序算法的比较
先来个表格总结直观展示下: 各种内部排序算法的性质 算法种类 时间复杂度 空间复 杂度 稳定性 最好情况 平均情况 最坏情况 插入排序 直 ...
最新文章
- C#winform无响应,界面线程崩溃问题
- Installing PowerShell Management Library for windows server 2008
- Wiew 像写 Android UI 一样写小游戏布局
- 博物馆自动灭火系统应如何选择
- C语言中面向对象编程
- codesys raspberry pi_11月7日|Pi第四次减产来袭?4点浅析中文区用户关心的问题
- docker 开启服务
- centos7搭建superset数据平台
- Android开发——电话簿
- 11种职场肢体语言,你懂吗
- python图像处理(三)波形叠加模拟
- LabelImage 安装过程
- 一个玩游戏的失足青年,转行做游戏开发到教育的挣扎过程(3)
- 不吹不黑,网络安全工程师年薪30万是真的吗?
- 国产CAD制图软件中怎么设置两点标注?
- 奥特曼系列ot中怎么选择服务器,《奥特曼系列OL》新手攻略(另外一篇)
- 使用unity制作AR的方法 EasyAR+ARCore
- Java实现LeetCode第199场周赛(题号5472,5473,5474,5462)
- docker ——安装tomcat
- 【经验】Chrome网络代理插件SwitchyOmega安装
热门文章
- 微软Workflow Foundation 高阶透视
- ccna学习笔记之五:路由器密码恢复
- (原创)无废话C#设计模式之十一:Composite
- 为Eclipse plug-in(插件)创建语言包
- Ubuntu 14.04 FTP服务器--vsftpd的安装和配置
- 使用QT Creator开发C++程序
- 2018-2019-1 20165323 20165333 20165336 实验五 通讯协议设计
- Error:Unable to tunnel through proxy. Proxy returns HTTP/1.1 400 Bad Request
- intellij idea14.1 卡顿问题解决
- ProgressBar 各种样式