首页 > 其他分享 >插入排序分析

插入排序分析

时间:2024-02-22 23:34:07浏览次数:27  
标签:分析 int 插入排序 个数 tail 升序 复杂度

插入排序(升序)复杂度分析

可以把插入排序想象成抽扑克牌,从牌堆中每抽一张牌我们就和手牌比较并插入。
一般,我们习惯大牌放左边,小牌放右边,那么我们抽牌时从左往右(或从右
往左)把抽的牌和手牌对比,找到,放入手牌
,这个过程就可以看作时插入排序

1.代码实现

插入排序代码实现比较简单

#include "iostream"
#include "cassert"
using namespace std;

void swap(int *a1,int *a2){
    int tmp = *a1;
    *a1=*a2;
    *a2=tmp;
}
//默认升序
void insert_sort(int* a,int n) {
    assert(a);
    int end_index = n - 1;
    for (int i = 1; i <= end_index; i++) {
        for (int tail = i - 1; tail >= 0; tail--)
            if (a[tail] > a[tail + 1])
                swap(&a[tail], &a[tail + 1]);
            else
                break;
    }
}
int main(){
    int a[10]={4,1,7,5,9,3,8,0,1,2};
    insert_sort(a,10);
    for(auto i:a){
        cout<<i<<' ';
    }
    return 0;
}

运行结果:

0 1 1 2 3 4 5 7 8 9
进程已结束,退出代码为 0
  • 函数参数a是数组,n时数组大小
  • end_index是数组末元素索引
  • i从第二个元素开始遍历(如果没有第二个,整个函数结束)
  • tail为有序数列末元素,拿tail和tail+1作比较,如果降序就交换位置

2.复杂度分析

先说结果:

最优时间复杂度:O(N)(数组本就有序)
最差时间复杂度:O(N^2)
空间复杂度:O(1)

空间复杂度为1可以理解,插入排序函数另外需要的变量空间为常数个

时间复杂度分析

我们默认得到升序,最坏的情况莫过于需要插入的数和有序数列的每一个都对比---数列是降序的
那么,假设有n个数

  • 第2个数需要和前面的数对比1次
  • 第3个数需要和前面的数对比2次
  • 第4个数需要和前面的数对比3次
  • 。。。
  • 第n个数需要和前面的数对比n-1次
  • 总共次数=(1+n-1)*n/2=n^2/2
  • 则时间的复杂度O(n^2)

标签:分析,int,插入排序,个数,tail,升序,复杂度
From: https://www.cnblogs.com/saopigqwq233/p/18028426

相关文章

  • ptmalloc、tcmalloc与jemalloc对比分析
    背景介绍在开发微信看一看期间,为了进行耗时优化,基础库这层按照惯例使用tcmalloc替代glibc标配的ptmalloc做优化,CPU消耗和耗时确实有所降低。但在晚上高峰时期,在CPU刚刚超过50%之后却出现了指数上升,服务在几分钟之内不可用。最终定位到是tcmalloc在内存分配的时候使用自旋锁,在锁冲......
  • AI智能分析网关V4智慧工厂视频智能监管与风险预警平台建设方案
    一、背景需求分析1)随着信息技术的迅猛发展和制造业竞争的加剧,智慧工厂成为了推动制造业转型升级的重要引擎。智慧工厂解决方案通过整合物联网、人工智能、大数据分析等先进技术,实现生产过程的智能化、自动化和高效化,为企业提供了更加灵活、智能的生产模式和管理方式。2)工厂生产......
  • 自底向上语法分析
    目录自底向上语法分析移入-规约法自底向上语法分析自底向上的语法分析是编译原理中的一个重要概念,它与自顶向下的语法分析相对应。自底向上的语法分析是从输入串的底部(叶子节点)开始,逐步进行归约,直到达到文法的开始符号,从而构造出一棵语法树。这种分析方法采用的是最左归约方式,也......
  • 逆向实战30——阿里227逆向分析
    前言本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!公众号链接星球链接目标网站aHR0cHM6Ly93ZS41MWpvYi5jb20=227的很多。可以自己去找。不是不写太长......
  • BOSHIDA DC电源模块在工业自动化中的应用案例分析
    BOSHIDADC电源模块在工业自动化中的应用案例分析BOSHIDADC电源模块在工业自动化中有很多应用案例,以下是其中几个典型的例子:1.机器人控制系统:机器人在工业自动化中有着重要的作用,而机器人的控制系统需要稳定可靠的电源供应。DC电源模块可以提供稳定的直流电源,满足机器人控制......
  • 预测分析
    目录递归的预测分析非递归的预测分析递归的预测分析在编译原理中,预测分析(PredictiveParsing)或预测分析表是一种自底向上的语法分析方法。递归预测分析通常指的是利用递归下降(RecursiveDescent)方法来进行预测分析。递归下降解析器是基于递归的解析算法,它为文法的每个非终结符(n......
  • monkey命令及性能报告结果分析
    monkey命令adbshellmonkey-pcom.mihoyo.hyperion-s 1708647041443 -v-v-v--throttle300--ignore-crashes--ignore-timeouts10>【文件路径】操作次数10写在命令最后。-p,指定包进行操作;-s,指定固定的seed值(伪随机数生成器的seed值。如果用相同的seed值再次运行m......
  • 东方红锁车版本死机问题分析
    现象:与东方红ecu交互过程中,程序进入hardfault异常;查找过程:方式1、通过keil软件调试功能,在hardfault处打断点,查看callstack窗口。callstack窗口处,有函数调用过程,但全是freertos系统函数调用,没有自己定义的函数,系统函数是没问题的,故想通过查看callstack窗口查找问题行不通了;方......
  • 分析kube-apiserver单次创建namespace耗时
    日志输出#业务日志I022022:12:39.14936440965multi_config_multi_clientset.go:63]begintowaitcachesyncI022022:12:39.25046140965multi_config_multi_clientset.go:67]waitcachesyncendI022022:12:39.25644040965multi_config_multi_clientset.go:......
  • 大数分析(6)——Y序列
    前言然后是Y序列,0-Y可以直接与BMS相互转换,而基本的1-Y序列(常说的Y序列就是这个)便有着极大的提升,甚至可以提升到n-Y,\(\omega-\)YBMS和Y序列,便如同强者界的天道、奥加一般(同样的,后面由于缺少标定记号可能会跳过大段/直接开鸽阶差为1的情况请参考PrSS,完全一致,极限同样是\(\epsil......