美文网首页
插入排序(黑马程序员武汉中心)

插入排序(黑马程序员武汉中心)

作者: 黑马程序员武汉校区 | 来源:发表于2019-08-28 15:08 被阅读0次

插入排序

一、分类

1、直接插入排序
2、希尔插入排序

1、直接插入排序

A.含义

讲一个记录插入到已经排序好的有序列表当中。

B.步骤

a.sorted数组的第0个位置没有放入数据
b.从sorted第二个数据开始处理:如果该数据比前面的数据小.说明该数据需要往前面移动。
    (1)首先将该数据备份到 sorted的0号位置作为"哨兵"
    (2)然后将该数据的前面那个数据往后移动
    (3)然后往前搜索,找插入的位置
    (4)找到插入的位置之后,第0位置的那个数据插入到对应的位置。
直接插入排序.PNG

2、希尔排序(缩小增量排序 diminishing increment sort)

A.含义

先将整个等待排序的代码分割成为若干的子序列,分别进行直接插入排序,等待整个序列中记录基本有序的时候,再对全体进行一次直接插入排序

B.插入排序代码

main()方法的写法

public static void main(String[] args) {
    Random r = new Random();
    int size = 10;
    int[] array = new int[size];
    //排序前,赋值并且打印
    System.out.println("排序前:");
    for (int i = 0; i < array.length; i++) {
        array[i] = r.nextInt(100);
        System.out.print(array[i]+" ");
    }
    System.out.println();
    //调用排序方法
    insertSort(array);
    //排序后,打印输出结果
    System.out.println("排序后:");
    for (int i = 1; i < array.length; i++) {
        System.out.print(array[i]+" ");
    }
    System.out.println();
}

排序方法的写法

//直接插入排序的方法
public static void insertSort(int[] arr){
    int len = arr.length;
    for (int i = 2; i < len; i++) {
        if(arr[i]<arr[i-1]){
            arr[0] = arr[i];
            arr[i] = arr[i-1];
            int insertPosition = 0;
            for (int j = i-2; j >=0; j--) {
                if (arr[j]>arr[0]){
                    arr[j+1] = arr[j];
                }else{
                    insertPosition = j+1;
                    break;
                }
            }
            arr[insertPosition] = arr[0];
        }
    }
}

运行结果

排序前:
2 68 46 58 81 61 18 27 54 43 
排序后:
18 27 43 46 54 58 61 68 81 

相关文章

  • 插入排序(黑马程序员武汉中心)

    插入排序 一、分类 1、直接插入排序 A.含义 B.步骤 2、希尔排序(缩小增量排序 diminishing in...

  • Java泛型(黑马程序员武汉中心)

    Java泛型 一、概述 1、泛型含义 2、泛型好处 3、泛型分类 二、常见的泛型案例 1、泛型方法 A.定义时 B...

  • 以太坊钱包MyEtherWallet使用

    【传智播客.黑马程序员训练营成都中心】 转载请注明出处作者: 成都校区.强哥 1.MyEtherWallet简介 ...

  • 基于以太坊私链代币发布

    【传智播客.黑马程序员训练营成都中心】 一、前言 ​​ 1.1 预备知识 (1) 以太坊相关概念 (2) 熟悉智...

  • solidity(二)

    【传智播客.黑马程序员训练营成都中心】 solidity(二) 目标 Solidity是一种面向对象的智能合约高级...

  • ipfs是否能替代http

    【传智播客.黑马程序员训练营成都中心】 转载请注明出处 作者: 成都校区.渣渣辉 IPFS vs HTTP 什么是...

  • solidity面向对象(一)

    【传智播客.黑马程序员训练营成都中心】 什么是solidity? Solidity是一种面向对象的智能合约高级语言...

  • 以太坊开发环境搭建

    【传智播客.黑马程序员训练营成都中心】 安装 Node.js 安装节点仿真器 安装 solidity 编译器 安装...

  • Java中的Annotation详解

    【传智播客.黑马程序员训练营成都中心】 前言: 作为Java开发人员,经常能在代码中看到注解(Annotation...

  • 2020年全新前端学习路线图,学完你就是大神!

    黑马程序员web前端中级程序员学习路线图,含配套视频,前端工具,源码等。 黑马程序员学习路线图及能掌握的能力(总,...

网友评论

      本文标题:插入排序(黑马程序员武汉中心)

      本文链接:https://www.haomeiwen.com/subject/lazpectx.html