美文网首页前端开发那些事儿
排序算法 — 插入排序法(改进版)

排序算法 — 插入排序法(改进版)

作者: Geekholt | 来源:发表于2020-05-17 16:49 被阅读0次

如需转载请评论或简信,并注明出处,未经允许不得转载

概述

插入排序就是从数组的第二位开始,不断的与前面一位数字进行比较,直到插入到合适位置的排序算法(类似扑克牌理牌)

本文是对基础的插入排序进行一个改进,解决插入排序数值交换过于频繁的问题,具体见下面的排序过程和代码(结合上一章更有利于理解这个插入排序算法改进的思想)

时间复杂度

O(n²)

排序过程

  1. 初始化一个数组


  1. 找到数组中的第2个数(默认第一个数已经排好序)


  1. 拷贝出第2个数的副本


  1. 比较第2个数与第1个数的大小,如果第2个数更小,那就用第1个数直接覆盖第2个数


  1. 将第2个数的副本赋值给第1个数


  2. 找到数组中的第3个数


  3. 拷贝出第3个数的副本


  4. 比较第3个数与第2个数的大小,如果第3个数更小,那就用第2个数直接覆盖第3个数;
    继续比较第3个数与第1个数的大小,如果第3个数更小,那就用第1个数直接覆盖第2个数;



  5. 将第3个数的副本赋值给第1个数


  6. 找到数组中的第4个数
    ......

不断重复上述步骤,直到数组从小到大排列

代码

public static void sort(int[] arr) {
    int n = arr.length;
    for (int i = 1; i < n; i++) {
        int a = arr[i];
        int j;
        for (j = i; j > 0 && arr[j - 1] > a; j--) {
            arr[j] = arr[j - 1];
        }
        arr[j] = a;
    }
}

性能测试

随机生成10,000个从0到10,000的数,分别进行五次测试,效果如下

次数 性能
1 27ms
2 36ms
3 28ms
4 30ms
5 20ms

随机生成100,000个从0到100,000的数,分别进行五次测试,效果如下

次数 性能
1 1107ms
2 1082ms
3 1097ms
4 1392ms
5 1265ms

相关文章

  • 常用的排序算法详解:希尔排序,桶排序,选择排序,冒泡排序,快速排

    排序算法——希尔排序 希尔排序是插入排序的一种,又称"缩小增量排序”,是插入排序算法的一种更高效的改进版本。 希尔...

  • 算法学习:希尔排序

    背景介绍:也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序...

  • 算法-插入排序

    算 法:插入排序算法时间复杂度: 插入排序算法描述 插入排序伪代码 插入排序实现 插入排序算法概述 插入排...

  • python实现希尔排序算法

    希尔排序是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。...

  • 希尔排序

    算法思想:希尔排序是插入排序的改进版,现将序列按照一定步长分为子序列进行插入排序,最后步长为1,整体再插入排序。代...

  • 希尔排序(Shell Sort)

    1. 算法描述 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不...

  • 排序-希尔排序(分治)

    希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序...

  • swift经典算法-希尔排序

    希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序...

  • 排序算法④——希尔排序

    希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序...

  • 算法与数据结构-希尔排序

    一、概念 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序...

网友评论

    本文标题:排序算法 — 插入排序法(改进版)

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