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

直接插入排序(内部排序)相关推荐

  1. 10-1-直接插入排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第10章  内部排序 - 直接插入排序 --<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课 ...

  2. 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...

    掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等). 数组高级以及Arrays(掌握) 排序方法 空间复杂度 时间复杂度 稳定性 插 入 排 序 ...

  3. 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)...

    写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的随意序列,又一次排列成一个按keyword有序的序列.因此排序掌握各种排序算法很重要. 对以下介绍的各个排序,我们假定全部排 ...

  4. 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)...

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/20043459   前言 本来想将所有的内部排序总结为一篇博文,但是随着研究的深入,还是放弃 ...

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

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

  6. 对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。

    题目要求: (1)对以下6种常用的内部排序算法进行比较:起泡排序.直接插入排序.简单选择排序.快速排序.希尔排序.堆排序. (2)待排序表的表长不小于100:其中的数据要用伪随机数产生程序产生:至少要 ...

  7. 内部排序算法的实现(插入排序、选择排序、交换排序、归并排序、计数排序)

    目录 插入排序 直接插入排序 希尔排序 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序(递归) 三数取中 快速排序(hoera版) 快速排序(挖坑版) 快速排序(前后指针版) 快速排序非 ...

  8. 简单的选择排序(内部排序)

    1 /** 2 * 3 */ 4 package com.trfizeng.selectionsort; 5 6 /** 7 * @author trfizeng 内部排序 选择排序-简单选择排序(S ...

  9. 超详细!各种内部排序算法的比较

    先来个表格总结直观展示下: 各种内部排序算法的性质            算法种类                    时间复杂度  空间复 杂度 稳定性 最好情况 平均情况 最坏情况 插入排序 直 ...

最新文章

  1. C#winform无响应,界面线程崩溃问题
  2. Installing PowerShell Management Library for windows server 2008
  3. Wiew 像写 Android UI 一样写小游戏布局
  4. 博物馆自动灭火系统应如何选择
  5. C语言中面向对象编程
  6. codesys raspberry pi_11月7日|Pi第四次减产来袭?4点浅析中文区用户关心的问题
  7. docker 开启服务
  8. centos7搭建superset数据平台
  9. Android开发——电话簿
  10. 11种职场肢体语言,你懂吗
  11. python图像处理(三)波形叠加模拟
  12. LabelImage 安装过程
  13. 一个玩游戏的失足青年,转行做游戏开发到教育的挣扎过程(3)
  14. 不吹不黑,网络安全工程师年薪30万是真的吗?
  15. 国产CAD制图软件中怎么设置两点标注?
  16. 奥特曼系列ot中怎么选择服务器,《奥特曼系列OL》新手攻略(另外一篇)
  17. 使用unity制作AR的方法 EasyAR+ARCore
  18. Java实现LeetCode第199场周赛(题号5472,5473,5474,5462)
  19. docker ——安装tomcat
  20. 【经验】Chrome网络代理插件SwitchyOmega安装

热门文章

  1. 微软Workflow Foundation 高阶透视
  2. ccna学习笔记之五:路由器密码恢复
  3. (原创)无废话C#设计模式之十一:Composite
  4. 为Eclipse plug-in(插件)创建语言包
  5. Ubuntu 14.04 FTP服务器--vsftpd的安装和配置
  6. 使用QT Creator开发C++程序
  7. 2018-2019-1 20165323 20165333 20165336 实验五 通讯协议设计
  8. Error:Unable to tunnel through proxy. Proxy returns HTTP/1.1 400 Bad Request
  9. intellij idea14.1 卡顿问题解决
  10. ProgressBar 各种样式