美文网首页
七大排序之插入排序

七大排序之插入排序

作者: 里里角 | 来源:发表于2018-08-13 08:39 被阅读5次

<InsertSort>
算法思路:始终将序列看为Sorted+Unsorted两部分;
初始化:空序列无所谓有序;
迭代:从Unsorted中取出元素e,在有序序列中查找确定位置,有序序列长度增加1;
不变性:随着有序序列规模的递增,其规模为n时,整体有序;
与SelectionSort的比较:左右颠倒、SelectionSort中,无序的前缀部分始终不超过有序部分的最小值,但InsertSort没有这种限制;
性能分析:最好情况O(n) / 最坏情况O(n^2) / 平均性能 O(n^2)
是一种Input-Sensitive算法(Shell排序也是):算法复杂度不仅取决于问题的规模,更多地取决于输入本身的特性;

void InsertSort(int *a,int lo,int hi)
{
    int n=hi-lo+1;
    for(int j=lo+1;j<lo+n;j++){
        int key=a[j]; //待排序第一个元素
        int i=j-1; //当前已排序的元素的最后一个索引数
        while(i>=lo && key < a[i])
        {
            //数组逐个后移一位,直至找到合适位置将其插入
            a[i+1]=a[i];
            i--;
        }
        a[i+1] = key;//找到合适位置,将key值给i索引后面
    }

}

复杂度分析:
空间复杂度:需要一个记录的辅助空间O(1);
时间复杂度:
最好情况:比较n-1次,无需移动,时间复杂度为O(n)
最坏情况:比较2+3+4+...+n=(n+2)(n-1)/2次,移动次数为∑(i+1)=(n+4)(n-1)/2次(i从2到n);
平均情况:O(n^2)

相关概念<逆序对>

相关文章

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

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

  • 七大排序之插入排序

    算法思路:始终将序列看为Sorted+Unsorted两部分;初始化:空序列无所谓有序;迭代:从Unsorted中...

  • 算法-插入排序

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

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

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

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

  • java快速学习排序---插入排序

    1.java实现插入排序 (1)、图解插入排序 (2)、插入排序的思想 (3)、插入排序的代码实现

  • 算法(排序)

    一、内部排序 1、插入排序—直接插入排序(Straight Insertion Sort) 2、插入排序—希尔排序...

  • Java排序算法

    插入排序 直接插入排序 折半插入排序 交换排序 冒泡排序 快速排序 选择排序 简单选择排序 堆排序 其他排序 二路...

  • 一遍文章搞定插入排序-java版

    插入排序 1.1 插入排序的基本介绍 插入排序属于内排,就是以插入的方式来达到排序的目的 1.2 插入排序思想 将...

  • 算法之插入排序

    算法之插入排序 一:基本概念插入排序(Insert Sort),每次将一个待排序的数据元素,插入到前面已经排好序的...

网友评论

      本文标题:七大排序之插入排序

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