美文网首页算法导论C++实现
算法基础-4.1-插入排序

算法基础-4.1-插入排序

作者: zhouycoriginal | 来源:发表于2018-12-16 19:43 被阅读0次

对于插入排序:一个基本理论是将一个记录插入到已经排好序的表中 每次从表中选一个记录,记录数逐渐增加。已排好序的表就是待插入记录位置前的部分。与冒泡排序相似,时间复杂度最坏接近O(n^2)
如下图:

插入排序.png
#include<iostream>
#include <vector>

using namespace std;

void insert_sort(vector<int> &vec){

    for(int idx=1; idx<vec.size();idx++){
        int pre_idx = idx-1;
        int key = vec[idx];
        //ascending order
        while(pre_idx>=0 && vec[pre_idx]>key){
            vec[pre_idx+1] = vec[pre_idx];
            pre_idx--;
        }vec[pre_idx+1] = key;
    }
}


int main(int argc, char const *argv[])
{
    std::vector<int> v={5,2,4,6,1,3};
    insert_sort(v);
    for(auto item:v)
        cout<<item<<" ";
    cout<<endl;
    return 0;
}

时间复杂度分析:
当待排序的表内的元素为正序时,需要比较的次数明显为:
\sum_{i=1}^{n}1=n-1
当全部元素为逆序时,需要比较的次数为:
\sum_{i=1}^{n}i=(n-1)(n-2)
此时移动数量为: \sum_{i=1}^{n}(i+1)=\frac{(n+4)(n-1)}{2}

相关文章

  • 算法基础-4.1-插入排序

    对于插入排序:一个基本理论是将一个记录插入到已经排好序的表中 每次从表中选一个记录,记录数逐渐增加。已排好序的表就...

  • 插入排序算法实现

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

  • 排序

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

  • 开发者应该掌握的几种排序算法

    该篇文章主要介绍了算法基础以及几种常见的排序算法:选择排序、插入排序、冒泡排序、快速排序、堆排序。 一、算法基础 ...

  • 算法导论——第一部分 基础知识(二)

    第2章 算法基础 本章介绍一个贯穿本书的算法设计与分析的框架 2.1插入排序 算法思路 插入排序的工作方式像揭牌时...

  • 算法-插入排序

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

  • 常见排序算法

    1 前言 2 排序基础2.1 选择排序2.2 插入排序 3 高级排序算法3.1 归并排序3.1.1 插入排序与归并...

  • 二分插入排序

    1.算法思想 二分插入排序也是插入排序算法的一种,其基本思想是:引入二分查找的思想,在直接插入排序的基础上减少比较...

  • 基础排序算法总结

    排序算法分为内部排序和外部排序,而我们经常说的基础排序算法,都是内部排序算法。包括冒泡排序,选择排序,插入排序,快...

  • 排序算法

    概述 一般排序算法(以元素比较为基础) => 快速排序、归并排序、插入排序、冒泡排序、堆排序 特殊排序算法 => ...

网友评论

    本文标题:算法基础-4.1-插入排序

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