算法的时间复杂度和空间复杂度分析

news2024/9/17 7:09:07

文章目录

    • 实验目的
    • 实验内容
    • 实验过程
    • 运行结果
    • 复杂度分析

实验目的

通过本次实验,了解算法复杂度的分析方法,掌握递归算法时间复杂度的递推计算过程。

实验内容

二路归并排序的算法设计和复杂度分析。

实验过程

1.算法设计
归并排序:是指将两个或两个以上的的有序序列合并成一个有序序列。
排序思想:
(1)将每一个数据看成一个单独的有序序列,则n个待排序数据就是n个长度唯一的有序子序列;
(2)对所有有序子序列进行两两归并,得到n/2个长度为1或2的有序子序列–这这为一趟归并;
(3)重复(2),直到得到长度为n的有序序列为止。
上述排序过程中,子序列总是两两归并,极为二路归并排序。这算法设计的重点是如何将相邻的两个子序列归并成一个子序列。
算法实验原理:
1、申请一个和原始排序数组空间一样大的额外数组。
2、定义归并初始长度 length。
3、将数组分块。
4、将分块数组进行排序,把数据存入额外一个数组。(下一次用额外数组排序,数据存入原始数组,轮流存储)
5、增加归并长度 length*2。
6、重复3-5步,即可得到排序。
2.程序清单

#include <stdio.h>
#include <stdlib.h>
// 将a[s...m]和a[m+1...e]两个有序子序列归并为有序
// 归并后的序列存放数组b中 
void merge(int a[], int s, int m, int e)
{
    int i,j,k;
    // 申请临时空间存放有序序列
    int *b = (int *)malloc(sizeof(int)*(e-s+1));

    for(i=m+1,k=0,j=s; j<=m && i<=e; ++k)
    {
        if(a[j] <= a[i])
            b[k] = a[j++];
        else
            b[k] = a[i++];
    }
    while(j<=m)
    {
        b[k] = a[j];
        k++;
        j++;
    }
    while(i<=e)
    {
        b[k] = a[i];
        k++;
        i++;
    }
    // 排序完成后,复制到原数组a
    for(i=s,k=0; i<=e; i++,k++)
        a[i] = b[k];
    free(b);
}
// 对a[s...e]序列进行归并排序 
void msort(int a[], int s, int e)
{
    if (s<e)
    {
        // 将整个序列一分为二
        int m = (s+e)/2;
        msort(a,s,m);
        msort(a,m+1,e);
        merge(a,s,m,e);
    }
}
void merge_sort(int a[], int length)
{
    msort(a,0,length-1);
}
int main(void)
{
    int a[10] = {4,3,1,2,6,5,0,9,8,7};
    merge_sort(a,10);
    int i;
    for(i=0; i<10; i++)
        printf("%d ", a[i]);
    return 0;
}

运行结果

在这里插入图片描述
在这里插入图片描述

复杂度分析

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/454581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

活动回顾|多模态 AI 开发者的线下聚会@深圳站(内含福利)

回顾来了&#xff01; 4 月 22 日&#xff0c;由 Jina AI 和 OpenMMLab 联合主办的 「多模态 AI 」Office Hours 深圳站圆满结束&#xff0c;迎来了将近 60 位开发者的热情参与&#xff01;现场不仅有别开生面的「开发者集市」供大家打卡赢取好礼&#xff0c;更有四场干货满满的…

传统机器学习(六)集成算法(1)—随机森林算法及案例详解

传统机器学习(六)集成算法(1)—随机森林算法及案例详解 1、概述 集成学习&#xff08;Ensemble Learning&#xff09;就是通过某种策略将多个模型集成起来&#xff0c;通过群体决策来提高决策准确率。 集成学习首要的问题是选择什么样的学习器以及如何集成多个基学习器&…

杂谈 看唯工具论的问题 与 瑞典马工的一些言论 如何辩证看

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

华为OD机试真题(Java),根据员工出勤信息,判断本次是否能获得出勤奖(100%通过+复盘思路)

一、题目描述 公司用一个字符串来标识员工的出勤信息 absent&#xff1a;缺勤late&#xff1a;迟到leaveearly&#xff1a;早退present&#xff1a;正常上班 现需根据员工出勤信息,判断本次是否能获得出勤奖&#xff0c;能获得出勤奖的条件如下&#xff1a; 缺勤不超过1次没…

闲聊之π和e到底是个啥

π和e 1. 圆周率π 耳熟能详的π&#xff0c;到底是什么&#xff0c;怎么来的&#xff1f; 圆周率π&#xff0c;圆的周长C2πr&#xff0c;其中r是圆的半径 1.1 刘徽割圆术 如图中所示&#xff0c;作出圆内的正十二边形&#xff0c;正二十四边形&#xff0c;…&#xff0c;用…

倾斜摄影三维模型OSGB格式 到OBJ 格式转换几个软件操作方法

倾斜摄影三维模型OSGB格式 到OBJ 格式转换几个软件操作方法 倾斜摄影三维模型是一种重要的三维地理信息数据&#xff0c;通常以OSGB格式保存。但在不同的三维软件中使用时&#xff0c;需要将其转换为更通用的OBJ格式。本文将介绍在技术上如何将OSGB格式的倾斜摄影三维模型转换为…

手机投屏到电脑的实用工具

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 背景说明 最近在项目开发工作中需要将手机屏幕投影到PC端&#xff0c;并通过PC端操作手机。为了满足该项开发需求&#xff0c;在项目小组中采用了Vysor作为工具。 Vysor介…

手写axios源码系列四:interceptor拦截器

文章目录 一、拦截器 interceptor1、创建 InterceptorManager.js 文件2、Axios 中实例化 InterceptorManager 类3、总结 在本系列的第一篇章节 手写axios源码系列一&#xff1a;axios核心知识点 中已经介绍过一些拦截器的基础知识&#xff0c;可知拦截器分为&#xff1a; 请求…

24从零开始学Java之如何正确地使用一维数组

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在之前的文章中&#xff0c;壹哥给大家讲解了java里的顺序结构、分支结构、循环结构等内容&#xff0…

diffusion扩散模型之hello world

以mnist图像生成样本为例&#xff0c;详细解释diffusion的每个步骤和过程 扩散模型包括两个过程&#xff1a;前向过程&#xff08;forward process&#xff09;和反向过程&#xff08;reverse process&#xff09;&#xff0c;其中前向过程又称为扩散过程&#xff08;diffusio…

Taro React组件开发(9) —— RuiCountDown 倒计时

1. 需求实现 根据传入的格式,返回倒计时的文本字段;时间格式需要自定义,需要返回对应时间的值;对毫秒级的时间进行渲染;自定义时间的样式;手动控制倒计时的开始、暂停和重置。2. 需求实现 查找网上类似组件 uView CountDown 倒计时;由于 uView CountDown 倒计时 是使用 …

深度学习 - 42.特征交叉与 SetNET、Bilinear Interaction 与 FiBiNet

目录 一.引言 二.摘要 - ABSTRACT 三.介绍 - INTRODUCTION 四.相关工作 - RELATED WORK 1.因式分解机及其变体 - Factorization Machine and Its relevant variants 2. 基于深度学习的点击率模型 - Deep Learning based CTR Models 3.SENET Module 五.FiBiNet Model 1…

【嵌入式】HC32F定时器PWM捕获+APC芯片实现模拟AD采样

目录 一 项目背景 二 原理说明 三 设计实现——定时器初始化 四 设计实现——PWM捕获 五 梳理总结 一 项目背景 目前使用了TI的ADC采样芯片ADS1018实现模拟量4-20mA/0-20mA的采样&#xff0c;原理是将外部输入的模拟量信号4-20mA&#xff0c;经由并联的两个100Ω电阻&#…

day-01 one-day projects

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &#x1f921; 个人主页&#xff1a;python学不会123 &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习…

AIGC席卷,抖快、阅文、知乎大战网文圈

配图来自Canva可画 成熟的网文市场&#xff0c;时不时进来一条鲶鱼。 经历了二十几个夏秋秋冬&#xff0c;网文市场形成了阅文、晋江、七猫、番茄等平台割据一方稳定的市场格局。后来暗自布局网文市场的知乎、抖音、快手等新玩家开始浮出水面&#xff0c;未来的市场纷争下或许…

Docker持久化方式-v和-volume的区别

docker数据的持久化一直用的是-v的方式&#xff0c;又叫Bind Mounts&#xff08;目录绑定&#xff09;&#xff0c;偶然间发现还有一种通过卷轴来实现持久化的方式&#xff0c;翻了下资料&#xff0c;整理了一下两种方式使用的场景。 -v&#xff08;Bind Mounts&#xff09; …

使用 Apache PDFBox 操作PDF文件

简介 Apache PDFBox库是一个用于处理PDF文档的开源Java工具。该项目允许创建新的PDF文档&#xff0c;操作现有PDF文档&#xff0c;并从PDF文档中提取内容。Apache PDFBox还包括几个命令行实用程序。 Apache PDFBox的主要功能如下&#xff1a; 从PDF文件中提取Unicode文本。将…

浅析提高倾斜摄影超大场景的三维模型轻量化的数据质量关键技术

浅析提高倾斜摄影超大场景的三维模型轻量化的数据质量关键技术 倾斜摄影超大场景的三维模型轻量化的质量关键技术主要包括&#xff1a; 1、保持数据精度。在进行轻量化处理时&#xff0c;必须确保数据的精度不受损失&#xff0c;否则会影响后续分析和应用方案。因此&#xff0…

接口测试不再难。这篇文章让你在5分钟内掌握接口自动化测试用例

目录 摘要&#xff1a; 一、背景 二、测试用例设计 三、测试脚本实现 四、最佳实践和技巧 总结 摘要&#xff1a; 本文介绍了接口自动化测试的重要性&#xff0c;并提供了一个简单的测试用例&#xff0c;涵盖了设计、条件、步骤和数据方面的考虑。通过使用Python中的req…

C/C++|物联网开发入门+项目实战|函数输入与输出|值传递|地址传递|连续空间的传递|嵌入式C语言高级|C语言函数的使用(1)-学习笔记(11)

文章目录 函数概述输入参数示例&#xff1a;值传递地址传递连续空间的传递 参考&#xff1a; 麦子学院-嵌入式C语言高级-C语言函数的使用 函数概述 一堆代码的集合,用一个标签去描述它 复用化&#xff0c;降低冗余度 标签 ------ 函数名 函数和数组都属于内存空间&#xff0c…