美文网首页
十大排序算法之插入排序

十大排序算法之插入排序

作者: 得_道 | 来源:发表于2020-08-31 21:40 被阅读0次
  • 插入排序非常类似扑克牌的排序

    image.png
  • 执行流程

  1. 在执行过程中,插入排序会将序列分为2个部分。(头部是已经排好序的,尾部是待排序的)

  2. 从头扫描每一个元素。每当扫描一个元素,就将它插入到头部合适的位置,使得头部数据依然保持有序。


    image.png
  • 实现
for (int begin = 1; begin < array.length; begin++) {
    int cur = begin;
    while (cur > 0 && cmp(cur, cur - 1) < 0) {
        swap(cur, cur - 1);
        cur--;
    }
}

逆序对

数组 <2,3,8,6,1> 的逆序对为:<2,1> <3,1> <8,1> <8,6> <6,1>,共5个逆序对

  • 插入排序的时间复杂度与逆序对的数量成正比关系
    逆序对的数量越多,插入排序的时间复杂度越高


    image.png

◼ 最坏、平均时间复杂度:O(n2)
◼ 最好时间复杂度:O(n)
◼ 空间复杂度:O(1)
◼ 属于稳定排序
◼ 当逆序对的数量极少时,插入排序的效率特别高

甚至速度比 O nlogn 级别的快速排序还要快
◼ 数据量不是特别大的时候,插入排序的效率也非常好

优化

  • 思路是将【交换】转为【挪动】
    1,先将待插入的元素备份
    2,头部有序数据中有比待插入的元素大的,都朝尾部方向挪动一个位置
    3, 将带插入的元素放到最终合适的位置


    image.png
for (int begin = 0; begin < array.length; begin++) {
    int cur = begin;
    T v = (T) array[cur];
    while (cur > 0 && cmp(v, array[cur - 1]) < 0) {
        array[cur] = array[cur - 1];
        cur--;
    }
    array[cur] = v;
            
}

相关文章

  • Algorithm -- 排序算法

    单链表十大经典排序算法冒泡排序选择排序插入排序归并排序快速排序堆排序计数排序桶排序 1. 十大经典排序算法 十大经...

  • 十大排序算法

    十大排序算法 1.插入排序 2.折半插入排序算法 3.选择排序 4.冒泡排序 5.谢尔排序 6.快速排序 7.堆积...

  • 排序算法概述

    十大排序算法:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序、希尔排序、计数排序,基数排序,桶排序 算法...

  • 十大排序算法

    算法说明 十大排序算法分别是:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序...

  • 算法-插入排序

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

  • 数据结构与算法-面试准备

    1、排序 冒泡排序,直接排序,插入排序十大经典排序算法最强总结 - hellozhxy的博客 - CSDN博客 快...

  • 数据结构和算法排序(三)

    常见十大排序算法: 冒泡排序、选择排序、插入排序、快速排序、堆排序希尔排序、归并排序、计数排序、基数排序、桶排序 ...

  • 十大经典排序算法(java实现)

    前言 本文我们将以java代码实现十大经典排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序...

  • c算法O(n)^2(一)

    选择排序 插入排序 优化插入排序算法

  • 排序算法之插入排序和希尔排序(shell sort)

    插入排序(inserction sort)和希尔排序(shell sort) 相关文章 排序算法之快速排序

网友评论

      本文标题:十大排序算法之插入排序

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