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

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

实验目的

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


实验内容

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


实验过程

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;
}


运行结果

34.png


35.png


复杂度分析


36.png


相关文章
|
2天前
|
供应链 算法 搜索推荐
从公布的前十一批其他算法备案通过名单分析
2025年3月12日,国家网信办发布算法备案信息,深度合成算法通过395款,其他算法45款。前10次备案中,深度合成算法累计3234款,其他类别647款。个性化推送类占比49%,涵盖电商、资讯、视频推荐;检索过滤类占31.53%,用于搜索优化和内容安全;调度决策类占9.12%,集中在物流配送等;排序精选类占8.81%,生成合成类占1.55%。应用领域包括电商、社交媒体、物流、金融、医疗等,互联网科技企业主导,技术向垂直行业渗透,内容安全和多模态技术成新增长点。未来大模型检索和多模态生成或成重点。
从公布的前十一批其他算法备案通过名单分析
|
2天前
|
人工智能 自然语言处理 供应链
从第十批算法备案通过名单中分析算法的属地占比、行业及应用情况
2025年3月12日,国家网信办公布第十批深度合成算法通过名单,共395款。主要分布在广东、北京、上海、浙江等地,占比超80%,涵盖智能对话、图像生成、文本生成等多行业。典型应用包括医疗、教育、金融等领域,如觅健医疗内容生成算法、匠邦AI智能生成合成算法等。服务角色以面向用户为主,技术趋势为多模态融合与垂直领域专业化。
|
16天前
|
存储 缓存 监控
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
29 3
|
3天前
|
人工智能 自然语言处理 算法
从第九批深度合成备案通过公示名单分析算法备案属地、行业及应用领域占比
2024年12月20日,中央网信办公布第九批深度合成算法名单。分析显示,教育、智能对话、医疗健康和图像生成为核心应用领域。文本生成占比最高(57.56%),涵盖智能客服、法律咨询等;图像/视频生成次之(27.32%),应用于广告设计、影视制作等。北京、广东、浙江等地技术集中度高,多模态融合成未来重点。垂直行业如医疗、教育、金融加速引入AI,提升效率与用户体验。
|
2月前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
3月前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
69 6
|
5月前
|
搜索推荐 算法
插入排序算法的平均时间复杂度解析
【10月更文挑战第12天】 插入排序是一种简单直观的排序算法,通过不断将未排序元素插入到已排序部分的合适位置来完成排序。其平均时间复杂度为$O(n^2)$,适用于小规模或部分有序的数据。尽管效率不高,但在特定场景下仍具优势。
|
4月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
107 1
|
5月前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
5月前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
112 0

热门文章

最新文章