【算法】时间复杂度(快速排序,归并排序,堆排序)

news2024/11/17 11:51:00

1 归并排序先分解再合并
2 归并排序演示
3 时间复杂度(快速排序,归并排序,堆排序)

1 归并排序先分解再合并

在这里插入图片描述

2 归并排序演示

"""
归并排序(Merge Sort)是一种基于分治思想的排序算法。
它将一个大的问题递归地分解成若干小问题,分别解决这些小问题后,再将结果合并,最终解决原问题。

归并排序具有稳定性,时间复杂度为 O(nlogn),适用于大规模数据排序。

归并排序的基本步骤
1 分解(Divide):将待排序的数组分成两个子数组,直到每个子数组只包含一个元素。
2 解决(Conquer):递归地对每个子数组进行排序。
3 合并(Combine):将两个已排序的子数组合并成一个有序的数组

时间复杂度分析
1 分解阶段:每次分割数组的时间复杂度是O(logn),因为每次分割数组都会将其长度减半。
2 合并阶段:每次合并两个子数组的时间复杂度是 O(n),因为每次合并都要遍历数组中的所有元素。
"""


def merge(li: list, low: int, mid: int, high: int):
    """
    归并排序的演示
    :param li: 传入的列表
    :param low: 最开始的下标
    :param mid: 下标的中间位置
    :param high: 最后一个小标
    :return:
    """
    i = low
    j = mid + 1
    ltmp = []
    while i <= mid and j <= high:  # 只要左右两边都有数
        if li[i] < li[j]:
            ltmp.append(li[i])
            i += 1
        else:
            ltmp.append(li[j])
            j += 1
    # while执行完了,肯定有一部分没数了
    while i <= mid:
        ltmp.append(li[i])
        i += 1
    while j <= high:
        ltmp.append(li[j])
        j += 1
    li[low: high + 1] = ltmp  # 将左右两边的数组通过切片回写到ltmp中


# li = [2, 4, 5, 7, 1, 3, 6, 8]  # 归并排序归并
# merge(li, 0, 3, 7)
# print(li)


def merge_sort(li: list, low: int, high: int):
    if low < high:  # 至少有两个元素,递归
        mid = (low + high) // 2
        merge_sort(li, low, mid)
        merge_sort(li, mid + 1, high)
        merge(li, low, mid, high)
        print("分解的结果:", li[low: high + 1])


li = list(range(10))
import random

random.shuffle(li)
print("打散后的列表:", li)
merge_sort(li, 0, len(li) - 1)
print("归并排序后的列表:", li)

运行结果展示:

在这里插入图片描述

3 时间复杂度(快速排序,归并排序,堆排序)

在这里插入图片描述

比较

在这里插入图片描述

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

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

相关文章

timing window file中的S L T指什么意思

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 来自星球提问&#xff1a; I S L T的含义如下: 每行的数据代表含义如下:

2024年最新Flink教程,从基础到就业,大家一起学习--Flink运行架构底层源码详解+实战

本文涉及到大量的底层原理知识&#xff0c;包括运行机制图解都非常详细&#xff0c;还有一些实战案例&#xff0c;所以导致本篇文章会比较长&#xff0c;内容比较多&#xff0c;由于内容太多&#xff0c;很多目录可能展示不出来&#xff0c;需要去细心的查看&#xff0c;非常适…

初始化列表 / 隐式转换 / 静态

目录 初始化列表隐式转换单参数的隐式类型转换多参数的隐式类型转换explicit关键字 static 初始化列表 大部分时候成员变量在对象实例化的时候调用构造函数就整体定义了&#xff0c;注意此时只有定义&#xff0c;不算初始化。而定义后的值的值是在构造函数里面给的。我们知道构…

ChaCha20:高效且安全的流密码算法

随着互联网的普及和数据安全意识的提高&#xff0c;加密算法在保护个人隐私和商业秘密方面发挥着越来越重要的作用。ChaCha20是一种流密码算法&#xff0c;由丹伯恩斯坦在2008年提出&#xff0c;后被广泛应用于网络通信和数据加密场景。本文将探讨ChaCha20的原理和特点。 ChaCh…

「ComfyUI」增强图像细节只需要一个节点,SD1.5、SDXL、FLUX.1 全支持,简单好用!

前言 ‍‍‍‍‍前 言 今天听雨给小伙伴们介绍一个非常简单&#xff0c;但又相当好使的一个插件。 功能很简单&#xff0c;就是增加或者减少图像的细节&#xff0c;节点也很简单&#xff0c;就一个节点&#xff0c;只需要嵌入我们的 ComfyUI 的基础工作流中就可以了&#xf…

高频变压器无功补偿怎么做

高频变压器的无功补偿主要是为了提高功率因数、减小无功损耗、提高电源利用率。在高频电路中&#xff0c;由于频率较高&#xff0c;传统的无功补偿方法需要进行一定的调整和优化。以下是高频变压器无功补偿的一些方法和建议&#xff1a; 1、无功补偿电容器 高频电容器选择&…

阿里云OSS跨账号迁移过程

阿里云OSS跨账号迁移过程 关于OSS在线迁移服务的更新说明 旧版在线迁移已停止服务,用户需切换至新版在线迁移。与旧版相比,新版在线迁移的主要区别在于身份验证方式的调整。新版不再使用AK/AS(AccessKey ID和AccessKey Secret)进行认证,而是采用了角色授权机制。这一变化旨…

【CTF Web】CTFShow 版本控制泄露源码 Writeup(目录扫描+.git泄漏)

版本控制泄露源码 10 版本控制很重要&#xff0c;但不要部署到生产环境更重要。 解法 用 dirsearch 扫描。 dirsearch -u https://a21fb823-c708-47ea-91c8-945c25d2ddb1.challenge.ctf.show/找到 .git 仓库。 访问&#xff1a; https://a21fb823-c708-47ea-91c8-945c25d2dd…

2024年【甘肃省安全员C证】考试内容及甘肃省安全员C证免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年甘肃省安全员C证考试内容为正在备考甘肃省安全员C证操作证的学员准备的理论考试专题&#xff0c;每个月更新的甘肃省安全员C证免费试题祝您顺利通过甘肃省安全员C证考试。 1、【多选题】听证程序是指行政机关作…

聚鼎装饰画:装饰画店铺未来5年到底有没有前景

随着人们生活水平的提高和审美需求的多样化&#xff0c;装饰画作为家居装饰的重要组成部分&#xff0c;其市场需求持续增长。然而&#xff0c;面对快速变化的市场环境和消费者偏好&#xff0c;装饰画店铺在未来5年的发展前景如何? 一方面&#xff0c;科技进步将为装饰画行业带…

鸿蒙(API 12 Beta3版)【使用ImagePacker完成图片编码】图片开发指导

图片编码指将PixelMap编码成不同格式的存档图片&#xff08;当前仅支持打包为JPEG、WebP 和 png 格式&#xff09;&#xff0c;用于后续处理&#xff0c;如保存、传输等。 开发步骤 图片编码进文件流 创建图像编码ImagePacker对象。 // 导入相关模块包 import { image } fr…

IOC/DI注解开发

IOC/DI&#xff08;Inversion of Control/Dependency Injection&#xff09;是一种依赖注入的软件设计模式&#xff0c;它的核心思想是将对象的创建和依赖关系的管理从代码中抽离出来&#xff0c;交给外部容器来管理。这种设计模式可以提高代码的可维护性、可测试性和可扩展性。…

【包教包会】怎么购买海外域名?Namecheap+虚拟卡购买步骤详解

前言 为什么要用海外域名&#xff1f; 首先&#xff0c;胖虎要介绍一下为什么要使用海外域名&#xff0c;使用国内的域名不好吗&#xff1f;主要是出于以下几个原因供大家参考&#xff0c;主要是涵盖了品牌保护、市场拓展、灵活性和创新性等多个方面&#xff1a; 品牌保护&a…

油耳朵用什么耳勺?揭露行业的五大隐患套路!

油耳清洁是很多人的一个困惑&#xff0c;由于外耳道分泌油性耵聍过多而导致。油耳使用传统耳勺和棉签很容易掏不干净&#xff0c;而可视挖耳勺采用了柔软且耐用的材料制成&#xff0c;可以避免因材料过硬对耳道造成损伤。并且用户可以通过摄像头清晰地看到耳道内的情况&#xf…

Java导出DBF文件(附带工具类)

导出DBF文件 先看效果 JavaDBF 使用JavaDBF库 数据类型映射 写入支持的类型 类型XBase类型XBase 符号JavaDBF 中使用的 Java 类型字符CharacterCjava.lang.String数值NumericNjava.math.BigDecimal浮点Floating PointFjava.math.BigDecimal布尔LogicalLjava.lang.Boolea…

公司如何监控员工电脑,怎么监控电脑进程

在现代企业管理中&#xff0c;监控员工电脑的行为已成为确保工作效率、数据安全和合规性的重要措施。通过合理的监控手段&#xff0c;企业可以预防潜在的安全威胁&#xff0c;优化工作流程&#xff0c;并确保员工遵循公司的政策和规定。 公司监控员工电脑的常见方法 屏幕监控&…

什么是pk答题软件源码

答题软件的源码是开发答题软件的基础程序代码。由于答题软件的功能和复杂程度不同&#xff0c;其源码也会有很大差异。 一般来说&#xff0c;答题软件的源码可能包含以下几个主要部分&#xff1a; 一、用户界面部分 登录和注册界面&#xff1a; 允许用户输入用户名、密码等信…

C++资料电子书资源PDF免费分享

C电子书 这里写目录标题 C电子书目录资源获取 目录 《数据结构(C语言版)》(严蔚敏 吴伟明编著).pdf 7.6MB 《C程序设计题解与上机指导》(第二版).谭浩强.pdf 7.0MB 《C程序设计(第四版)学习辅导》.谭浩强.扫描版.pdf 13.1MB 《C程序设计》第一版&#xff08;谭浩强&#xff09…

个人笔记--python画图(一维,二维,三维)

1. 一维 1. plot import numpy as np import matplotlib.pyplot as plt# linspace(): 创建等间距的数值序列 x np.linspace(0, 2 * np.pi, 100)u np.sin(x)# 绘制一维图形 plt.figure() plt.plot(x, u) plt.title(Plot of sin(x)) plt.xlabel(x) plt.ylabel(sin(x)) plt.sh…

监控摄像头能看到电脑屏幕吗?公司监控摄像头拍员工电脑屏幕!

监控摄像头已经成为许多企业和公共场所不可或缺的安全管理工具。 它们不仅守护着物理空间的安全&#xff0c;也在一定程度上影响着企业的运营管理和员工的行为规范。 然而&#xff0c;当“公司监控摄像头拍员工电脑屏幕”这一话题被提出时&#xff0c;不禁引发了广泛的讨论与…