美文网首页
排序算法之直接插入排序(Java)

排序算法之直接插入排序(Java)

作者: 假程序猿 | 来源:发表于2017-09-29 15:42 被阅读0次

本人对排序算法理解不深,希望通过动手写一写排序算法的实现,加深印象和理解

算法过程

  1. 把待排序数据分为2个区:
  • 有序区(初始第1个元素)
  • 无序区(初始第2至n个元素)
  1. 从无序区取第1个元素x,与有序区最后1个元素y依次往前比较
  • 如果y>x,则y往后挪动1个位置,并记录待插入的位置pos
  • 直到y<=x或到达有序区第1个元素时,把x插入pos位置
  1. 从无序区分别取第2至n元素,重复步奏2

上代码Java

/**
 * 直接插入排序
 */
@Test
public void insertSort() {
    // 待排序数组
    int[] a = { 8, 7, 3, 9, 0, 4, 5, 1, 6, 2 };
    System.out.println("--原始数组:" + arrayToStr(a));
    for (int i = 1; i < a.length; i++) {
        // 无序区待插入元素x
        int x = a[i];
        // 待插入有序区位置pos
        int pos = i;
        // 有序区待比较元素y
        int y;
        // 从后往前依次比较大小(期间保证pos大于0),检查y是否大于x
        while (pos > 0 && (y = a[pos - 1]) > x) {
            // y往后挪动,腾出位置
            a[pos] = y;
            // 更新插入位置
            pos--;
        }
        // 插入x元素到最终位置pos
        a[pos] = x;
        System.out.println("第" + i + "轮结果:" + arrayToStr(a));
    }
    System.out.println("over!");
}

/**
 * 数组拼接成字符串
 */
private String arrayToStr(int[] a) {
    StringBuilder buff = new StringBuilder(a.length * 3);
    for (int t = 0; t < a.length; t++) {
        buff.append(a[t]).append(" ");
    }
    return buff.toString();
}
输出结果及过程分析
-原始数组:8 7 3 9 0 4 5 1 6 2 # 7与8比较8往后挪动1位;最后7插入0位置
第1轮结果:7 8 3 9 0 4 5 1 6 2 # 3与8比较8往后挪动1位;3与7比较7往后挪动1位;最后3插入0位置
第2轮结果:3 7 8 9 0 4 5 1 6 2 # 9与8比较无挪动,over!
第3轮结果:3 7 8 9 0 4 5 1 6 2 # 0与9比较9挪动;0与8、7、3比较均挪动;最后0插入0位置
第4轮结果:0 3 7 8 9 4 5 1 6 2 # 4与9比较,依次类推
第5轮结果:0 3 4 7 8 9 5 1 6 2 
第6轮结果:0 3 4 5 7 8 9 1 6 2 
第7轮结果:0 1 3 4 5 7 8 9 6 2 
第8轮结果:0 1 3 4 5 6 7 8 9 2 
第9轮结果:0 1 2 3 4 5 6 7 8 9 
over!

相关文章

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • java 实现排序算法之「插入排序」

    java 实现排序算法系列 这是 Java 实现排序算法的第三篇文章——插入排序算法。插入排序可以说成是「一类」简...

  • 排序算法(一)直接插入排序算法

    排序算法(一)直接插入排序算法 1.基本概念  直接插入排序(Straight-Insertion-Sort)是一...

  • 排序

    本文记录几个基础的排序算法。排序算法分为插入排序、交换排序、选择排序等几大类。 插入排序 1. 直接插入排序 O(...

  • 排序——插入排序

    业精于勤荒于嬉 插入排序包括:直接插入排序、折半插入排序、希尔排序(缩小增量排序) 一、直接插入排序 1. 算法思...

  • 插入排序算法实现

    排序算法是最常见,最基础的算法,作者文集中记录了两种排序算法(插入排序,归并排序) 插入排序算法实现很简单直接,附...

  • 熟记代码片段

    1.转自 一遍记住Java常用的八种排序算法与代码实现 直接插入排序:

  • 经典排序算法-希尔排序Shell sort

    一、希尔排序思想 希尔排序是基于插入排序的快速的排序算法,先分组后对每组进行直接插入排序,再分组再直接执行插入排序...

  • 【数据结构】【C#】013-插入类排序:🥇直接插入排序(稳定)

    插入排序:直接插入排序(稳定) 【 算法思想 】 直接插入排序是一种最基本的插入排序方法,其基本操作是将第 i 个...

  • Java学习记录(常用 算法 排序 )

    排序算法的分类如下: 1.插入排序(直接插入排序、折半插入排序、希尔排序);2.交换排序(冒泡泡排序、快速排序);...

网友评论

      本文标题:排序算法之直接插入排序(Java)

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