#1 插入排序算法的简单分析

作者: 遇事不决_可问春风 | 来源:发表于2018-06-23 04:05 被阅读23次

简介

插入排序是一种用于排序的算法,该算法适合数据较少的应用场景(在后面介绍其他算法的时候会进行对比)。

算法原理简述

插入排序就像是你拿了一手的扑克牌,你要把他排好顺序,你需要拿起一张牌,然后把它和左边的牌做比较,直到找到合适的位置后插入,对这些牌从左到右重复上面的过程,就可以得到正确的排序。

C++ 代码演示

如不习惯使用 C++ 可以移步下面的算法分析查看伪码改写成习惯的语言

/*************************************************************************
    > File Name: Insertion_sort.cpp
    > Author: 
    > Mail: 
    > Created Time: 2018年06月04日 星期一 22时13分36秒
 ************************************************************************/

#include<iostream>
using namespace std;
int main(){
    // 测试数据
    int A[5] = {5,4,0,1,3};

    // 打印测试数据        
    cout << "测试数据: ";
    for(int i=0; i<5; i++){
        cout << A[i] << " ";
    }
    cout << endl;

    int key, j;
    
    // 循环遍历数组 A[1] -> A[数组长度]
    for(int i=1; i<sizeof(A)/sizeof(A[0]); i++){
        // (标记1)--当前要插入的元素的前一个元素
        j = i - 1;
        
        // 将当前要插入的元素保存到变量 key 中
        key = A[i];
        
        // 为当前需要排序的元素找到合适的位置
        while(j>=0 && key<A[j]){

            // 如果 A[i] < A[j] 并且 (标记1) >= 0 则将 A[j 向后推移一位]
            A[j+1] = A[j];

            // 将 (标记1) 再向前推移一位
            j--;
        }

        // 将 A[i] 插入到合适的位置
        A[j+1] = key;
    }

    // 打印运行结果
    cout << "运行结果: ";
    for(int i=0; i<5; i++){
        cout << A[i] << " ";
    }
    cout << endl;
}

###### 运行结果 ######

测试数据: 5 4 0 1 3 
运行结果: 0 1 3 4 5 

算法分析

这里为了更清晰方便使用伪代码分析算法的时间复杂性

伪码

这里分析时间复杂性时为了方便将所有语句的运行时间定为常量 Ci , N = 数组长度, 数组下标从 1 开始,并且只关注最坏的情况,也就是数组中的所有元素为倒序,由于简书不支持显示求和符号我就用截图代替了

image.png

将上面代码的语句全部加起来就是插入算法的时间复杂度了

image.png

因为:

image.png image.png

所以:

image.png

化简:

image.png

假设:

image.png

得到:

image.png

使用 O 符号得到该算法的时间复杂度为:

image.png

以上为本人阅读算法导论的笔记

本人能力有限,如果那里写的不对欢迎在评论区或者加群一起讨论

算法讨论组群二维码.png

相关文章

  • #1 插入排序算法的简单分析

    简介 插入排序是一种用于排序的算法,该算法适合数据较少的应用场景(在后面介绍其他算法的时候会进行对比)。 算法原理...

  • 排序之插入排序

    算法 最简单的排序算法之一是插入排序。插入排序由N-1趟排序组成。对于p=1到N-1趟,插入排序保证从位置0到位置...

  • lecture 1

    算法导论Lesson1 课程简介: 内容主要包括: 算法的含义、意义的简要介绍; 算法的分析; 插入排序、合并排序...

  • 数据结构算法全解析之排序算法性能比较与实际应用

    1. 算法重温 下面我们将带大家重新熟悉下排序算法。 插入排序 插入排序是一种较为简单的排序算法,它的基本思想是通...

  • 插入排序

    1 .算法思想 插入排序是最简单的排序算法之一。假定要将n个元素 a[0], a[1], · · · , a[n ...

  • 插入排序

    插入排序 插入排序(Insertion-Sort)是一种简单直观的排序算法。排序算法(英语:Sorting alg...

  • 排序算法-4--- 插入排序 (Insertion Sort)

    插入排序 (Insertion Sort) 1、概念 插入排序 是一种简单直观的排序算法。它的工作原理是通过构建有...

  • python实现插入排序(InsertSort)

    python实现【插入排序】 算法原理及介绍 插入排序(Insertion-Sort)的算法描述是一种简单直观的排...

  • 希尔排序(Shell Sort)

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

  • 插入排序算法实现

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

网友评论

  • 胡博要毕业:楼主我也在学习算法导论,请问有什么群吗?我想一起讨论,谢谢

本文标题:#1 插入排序算法的简单分析

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