直接插入排序算法

 基本思想:

  把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素;排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程。

 实例:

  0.初始状态 3,1,5,7,2,4,9,6(共8个数)

     有序表:3;无序表:1,5,7,2,4,9,6

  1.第一次循环,从无序表中取出第一个数 1,把它插入到有序表中,使新的数列依旧有序

     有序表:1,3;无序表:5,7,2,4,9,6

  2.第二次循环,从无序表中取出第一个数 5,把它插入到有序表中,使新的数列依旧有序

     有序表:1,3,5;无序表:7,2,4,9,6

  3.第三次循环,从无序表中取出第一个数 7,把它插入到有序表中,使新的数列依旧有序

     有序表:1,3,5,7;无序表:2,4,9,6

  4.第四次循环,从无序表中取出第一个数 2,把它插入到有序表中,使新的数列依旧有序

     有序表:1,2,3,5,7;无序表:4,9,6

  5.第五次循环,从无序表中取出第一个数 4,把它插入到有序表中,使新的数列依旧有序

     有序表:1,2,3,4,5,7;无序表:9,6

  6.第六次循环,从无序表中取出第一个数 9,把它插入到有序表中,使新的数列依旧有序

     有序表:1,2,3,4,5,7,9;无序表:6

  7.第七次循环,从无序表中取出第一个数 6,把它插入到有序表中,使新的数列依旧有序

     有序表:1,2,3,4,5,6,7,9;无序表:(空)

 Java实现:

package sort;
/**
 * 直接插入排序  的实现
 * 稳定算法
 * @author 那一季的银杏叶
 *
 */
public class InsertSort {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int a[] = {3,1,5,7,2,4,9,6};
        new InsertSort().insertSort(a);
    }
    /**
     * 直接插入排序算法的实现
     * @param a
     */
    private void insertSort(int[] a) {
        // TODO Auto-generated method stub
        System.out.println("———————————————————直接插入排序算法—————————————————————");
        int n = a.length;
        int i,j;
        for(i=1;i<n;i++){
            /**
             * temp为本次循环待插入有序列表中的数
             */
            int temp = a[i];
            /**
             * 寻找temp插入有序列表的正确位置
             */
            for(j=i-1;j>=0 && a[j]>temp;j--){
                /**
                 * 元素后移,为插入temp做准备
                 */
                a[j+1] = a[j];
            }
            /**
             * 插入temp
             */
            a[j+1] = temp;
            print(a,n,i);
        }
        printResult(a,n);
    }
    /**
     * 打印排序的最终结果
     * @param a
     * @param n
     */
    private void printResult(int[] a, int n){
        System.out.print("最终排序结果:");
        for(int j=0;j<n;j++){
            System.out.print(" "+a[j]);
        }
        System.out.println();
    }
    /**
     * 打印排序的每次循环的结果
     * @param a
     * @param n
     * @param i
     */
    private void print(int[] a, int n, int i) {
        // TODO Auto-generated method stub
        System.out.print("第"+i+"次:");
        for(int j=0;j<n;j++){
            System.out.print(" "+a[j]);
        }
        System.out.println();
    }
}

运行结果展示:

文章转载至:https://www.cnblogs.com/snowcan/p/6244128.html

Java插入排序算法的更多相关文章

  1. 排序系列 之 折半插入排序算法 —— Java实现

    基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...

  2. 排序系列 之 直接插入排序算法 —— Java实现

    直接插入排序算法 基本思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的 ...

  3. Java排序算法之插入排序

    基本过程: 每次将待排元素和已经排序好的序列进行比较,按照大小顺序插入进去,重新构造一个新的有序序列. 插入排序算法有种递归的思想在里面,它由N-1趟排序组成.初始时,只考虑数组下标0处的元素,只有一 ...

  4. java排序算法(七):折半插入排序

    java排序算法(七):折半插入排序 折半插入排序法又称为二分插入排序法,是直接插入排序法的改良版本,也需要执行i-1趟插入.不同之处在于第i趟插入.先找出第i+1个元素应该插入的位置.假设前i个数据 ...

  5. java排序算法(六):直接插入排序

    java排序算法(六):直接插入排序 直接插入排序的基本操作就是将待的数据元素按其关键字的大小插入到前面的有序序列中 直接插入排序时间效率并不高,如果在最坏的情况下,所有元素的比较次数的总和为(0+1 ...

  6. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法

    注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...

  7. 插入排序算法(Java代码实现)

    其它经典排序算法:https://blog.csdn.net/weixin_43304253/article/details/121209905 插入排序算法: 思路:将数据分为已经排序好的数据和未排 ...

  8. 插入排序算法 Java实现

    插入排序算法是算法排序中的一种: 该算法是假设已有序列是有序序列,从首元素(首元素为单个元素,肯定是有序的...)开始分析,对其他元素的位置进行有序的确定: 以算法为例: public class I ...

  9. 用 Java 实现一个插入排序算法

    有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法:插入排序法.插入排序的基本操作就是将一个数据插入到已经排好序的有序 ...

随机推荐

  1. 一次针对多台服务器交互式主机命令采集Python脚本编写

    [环境介绍]   系统环境:Linux + Python 2.7.10(监控主机)   [背景描述] 需求:每次节假日或者重要时间时,需要对数据库主机信息进行检查,比如主机空间使用率之类.有时候需要执 ...

  2. java7 java MethodHandle解析

    简介 JDK6之前我们会使用java反射来实现动态方法调用,多数框架用反射的比较多,例如mybatis.spring等.在JDK7中,新增了java.lang.invoke.MethodHandle( ...

  3. C# WinForm多线程(一)----- Thread类库

    Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程.什么是进程呢?当一个程序开始运行时,它就是一个进程,进程所指包括 ...

  4. springboot12-zuul

    Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门,提供动态路由,监控,弹性,安全等的边缘服务 所有请求都经过网关(API Gateway)zuul,然后转发到各个子服 ...

  5. localStorage用法

    引用:https://www.cnblogs.com/st-leslie/p/5617130.html const STORAGE_KEY = 'todos-vuejs'; export defaul ...

  6. vue安装教程总结

    转载:https://blog.csdn.net/sunny1660/article/details/78326548 简介:       vue.js是一套构建用户界面的渐进式框架.比较简洁,用于解 ...

  7. Java EE之Request部分方法使用示例

    Description: ApplicationProjectName:MedicineMs login.jsp[action:login|method:get] to loginServlet Ou ...

  8. python后端从数据库请求数据给到前端的具体实现

    先来贴一窜代码让大家理解前端/后端/数据库的工作原理, 首先简要说明:前端向后端请求数据,后端根据前端请求数据的类别分析其需求,并连接到数据库获取相应数据: 来一段简单的实例代码模拟淘宝商城: 前端代 ...

  9. ionic3安装

    1.安装 1)安装nodejs: 官网下载安装 2)可选安装 cnpm:  //安装了cnpm后,以后用到npm安装的东西都可以把npm替换成cnpm npm install -g cnpm --re ...

  10. MySql 在cmd下的学习笔记 —— 有关用户权限的操作(grant)

    用户连接到MySQL时: [用户]   <---->   [服务器] 分为2个阶段: 1:有没有权限连接: 2:有没有执行此操作的权利.(如select, update……) 判断依据:( ...