【算法基础】插入排序与二分查找、升级二分查找

文章目录

  • 1. 插入排序
    • 1.1 插入排序的思想
    • 1.2 插入排序的实现
  • 2. 普通二分查找
    • 2.1 普通二分查找的思想
    • 2.2 普通二分查找的实现
  • 3. 升级二分查找
    • 3.1 升级二分查找思想
    • 3.2 升级二分查找实现

1. 插入排序

1.1 插入排序的思想

在这里插入图片描述
插入排序很类似于已有一副有序的扑克牌,不断地通过值比较,将新的扑克牌插入到有序的扑克牌中(通过将新的扑克牌和有序的扑克牌进行比较)。
插入排序在代码实现上可能和冒泡有点像,但从算法的时间复杂度上分析,插入排序会优于冒泡排序。插入排序在遇到如 [ 1 , 2 , 3 , 4 , 5 , 6 ] [1, 2, 3, 4, 5, 6] [1,2,3,4,5,6]这种数据排列时,时间复杂度是常数项
选择排序和冒泡排序的时间复杂度都是 O ( n 2 ) O(n^2) O(n2),这两种排序算法都是与数据排列无关的。在遇到上述那种数据排列时,还是会执行 n 2 n^2 n2

1.2 插入排序的实现

def swap(arr, i, j):
    temp = arr[i]
    arr[i] = arr[j]
    arr[j] = temp


if __name__ == '__main__':
    arr = [6, 3, 1, 4, 2, 5]
    print("原数组:", arr)

    for i in range(1, len(arr)):
        for j in range(i, 0, -1):
            if arr[j] >= arr[j - 1]:
                continue
            else:
                swap(arr, j, j - 1)
    print("排序后的数组:", arr)

2. 普通二分查找

在一个有序数组中,找某个数是否存在

2.1 普通二分查找的思想

在一个有序数组中,通过不断将数组二分来寻找最小值。
在这里插入图片描述

2.2 普通二分查找的实现

if __name__ == '__main__':
    arr = [6, 3, 1, 4, 2, 5]
    print("原数组:", arr)

    arr = sorted(arr)
    print("排序后的数组:", arr)

    fN = 4
    low = 0
    high = len(arr) - 1
    print("想要找的数为:", fN)
    while True:
        mid = int((low + high) / 2)
        if mid == low or mid == high:
            print("数不存在")
            break
        if arr[mid] == fN:
            flag = True
            print("数存在,位于数组的第", mid, "位")
            break;
        elif arr[mid] > fN:
            high = mid - 1
        elif arr[mid] < fN:
            low = mid + 1

3. 升级二分查找

在一个有序数组中,找>=某个数最左侧的位置

3.1 升级二分查找思想

和普通二分很类似,就是一点点的差异
在这里插入图片描述

3.2 升级二分查找实现

if __name__ == '__main__':
    arr = [6, 3, 1, 4, 2, 5]
    print("原数组:", arr)

    arr = sorted(arr)
    print("排序后的数组:", arr)

    fN = 4
    low = 0
    high = len(arr) - 1
    print("想要找的数为:", fN)
    while True:
        if low > high:
            print("想要找的数最左侧位于数组的第", low, "位")
        mid = int((low + high) / 2)
        if mid == low or mid == high:
            print("数不存在")
            break
        if arr[mid] >= fN:
            high = mid - 1
        elif arr[mid] < fN:
            low = mid + 1

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型日报|今日必读的3篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.只需半天&#xff0c;训练一个15亿参数小模型 德州大学奥斯汀分校团队研究了一种基于现有大型基础语言模型开发小型基础语言模型的简单方法的有效性&#xff1a;首先从大型语言模型中继承几个 transformer 块&…

如何在Linux系统部署Joplin笔记并结合内网穿透实现无公网IP远程访问

文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具&#xff0c;拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能&#xff0c;…

使用jsbarcode+qrcodejs2:实现一维码+二维码的显示——基础积累

最近在写打印的功能&#xff0c;就是PC端页面通过调用vue-printnb插件来实现打印功能。 vue插件——vue-print-nb 实现打印功能&#xff1a;http://t.csdnimg.cn/NWrPc 在打印的内容当中&#xff0c;有一维码二维码&#xff0c;展示效果如下&#xff1a; 一维码的使用——…

DC-5渗透测试复现

DC-5渗透测试复现 目的&#xff1a; 获取最高权限以及5个flag 过程&#xff1a; 信息打点-文件包含漏洞-弹shell- scren-4.0.5提权 环境&#xff1a; 攻击机&#xff1a;kali(192.168.85.136) 靶机&#xff1a;DC_3(192.168.85.134) 复现&#xff1a; 一.信息收集 nma…

【已测 非网上加密版】全新UI彩虹站长在线工具箱系统源码下载 全开源版本

支持高达72种站长工具、开发工具、娱乐工具等功能。本地调用API、自带免费API接口&#xff0c;是一个多功能性工具程序支持后台管理、上传插件、添加增减删功能。 环境要求 * PHP > 7.3 * MySQL > 5.6 * fileinfo扩展 * 使用Redis缓存需安装Redis扩展 部署 * 下载源代码 …

【QT学习】6.控件进阶,C与C++的强制类型转换,自定义控件,qt制作一个简易播放器

1.C与C的强制类型转换 2.自定义控件 要求&#xff1a;制作一个登录页面 1.使用控件拖拽一个页面出来 使用水平布局&#xff0c;垂直布局&#xff0c;网格布局 2.建立自定义控件 1.为项目添加自定义的类 自己写一个控件 2. &#xff08;1&#xff09;创建一个Group Box容器 &a…

[观成科技] 加密C2框架Merlin流量分析

一、工具介绍 Merlin是一款支持多种协议的后渗透测试工具。与CS相比&#xff0c;由于该工具使用go语言进行开发&#xff08;go语言支持跨平台编译&#xff09;&#xff0c;使得Merlin具备了跨平台的优势。该工具传输数据使用了JWE&#xff08;JSON Web Encryption&#xff09;…

OSI七层网络攻击行为及防范手段

2020年3月3日&#xff0c;360安全大脑披露美国中央情报局攻击组织&#xff08;APT-C-39&#xff09;对我国大型互联网公司、政府部门及相关企业进行长达11年的网络攻击渗透&#xff0c;该组织所使用的网络武器和CIA“Vault7”项目中的网络武器完全吻合。如今随着互联网技术的蓬…

企业吉祥物如何通过全身动作捕捉设备化身虚拟主持人亮相直播发布会?

全身动作捕捉设备已经是各大产业领域耳熟能详的词汇&#xff0c;尤其在虚拟主持人等新型业务的兴起&#xff0c;全身动作捕捉设备可以赋能虚拟主持人亮相于企业直播发布会等现场&#xff0c;那企业吉祥物又该如何通过全身动作捕捉设备化身虚拟主持人亮相直播发布会呢&#xff1…

cdn加速与ssl加速

cdn CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节&#xff0c;使内容传输的更快、更稳定。 简单的来说&#xff0c;就是把原服务器上数据复制到其他服务器上&#xff0c;用户访…

计算方法实验5:对鸢尾花数据集进行主成分分析(PCA)并可视化

任务 iris数据集包含150条数据&#xff0c;从iris.txt读取&#xff0c;每条数据有4个属性值和一个标签&#xff08;标签取值为0&#xff0c;1&#xff0c;2&#xff09;。要求对这150个4维数据进行PCA&#xff0c;可视化展示这些数据在前两个主方向上的分布&#xff0c;其中不…

云卓LS-01喊话器说明书-新版中文

一: 概述 LS-01 无人机喊话器适用于搭载无人机进行交通管制、现场指挥、应急救援、人群疏导、防疫宣传、景区安防、鱼塘巡视、林业防控等场景。产品具有喊话、警报、播放多媒体文件等多种功能。喊话器外壳采用尼龙加纤材质&#xff0c;具有抗、抗震、轻便灵活、外观新颖、质量稳…

贝叶斯公式中的先验概率、后验概率、似然概率

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

VectorMap论文阅读

1. 摘要 自动驾驶系统需要对周围环境具有很好的理解&#xff0c;包括动态物体和静态高精度语义地图。现有方法通过离线手动标注来解决语义构图问题&#xff0c;这些方法存在严重的可扩展性问题。最近的基于学习的方法产生稠密的分割预测结果&#xff0c;这些预测不包含单个地图…

总结|性能优化思路及常用工具及手段

性能优化是降低成本的手段之一&#xff0c;每年大促前业务平台都会组织核心链路上的应用做性能优化&#xff0c;一方面提升系统性能&#xff0c;另外一方面对腐化的代码进行清理。现结合业务平台性能优化的经验&#xff0c;探讨一下性能优化的思路及常用工具及手段。性能优化本…

关于下载EsayOCR模型总是连接中断报错

关于下载EsayOCR模型总是连接中断报错 因为网络问题&#xff0c;自动下载总是失败报错&#xff0c;所以只好去网上手动下载训练好的模型。 以下是一些模型的下载地址&#xff1a;text detection model (CRAFT) chinese (traditional) model chinese (simplified) model jap…

TCP报文与三次握手四次断开、TCP最大连接数与文件打开数限制、keepalive、tcpdump、wireshark抓包分析工具

TCP报文 tcp详解、tcp与udp对比等 TCP:传输控制协议 UDP&#xff1a;用户数据报协议 源端口和目的端口字段&#xff1a;各占 2 字节&#xff08;16位&#xff09;。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。 序列号&#xff1a;在建立…

linux学习:进程(新建+运行某文件+退出处理函数+等待)

目录 api 创建新进程 注意 运行某文件 例子 注意 例子&#xff0c;等待进程 进程是由进程控制块、程序段、数据段三部分组成 进程有都有一个父进程&#xff0c;除了init&#xff0c;父进程可以创建子进程 每个进程都有一个PID&#xff0c;可以用ps来查看&#xff0c;等…

目标检测应用场景—数据集【NO.30】织物缺陷图像目标检测数据集

写在前面&#xff1a;数据集对应应用场景&#xff0c;不同的应用场景有不同的检测难点以及对应改进方法&#xff0c;本系列整理汇总领域内的数据集&#xff0c;方便大家下载数据集&#xff0c;若无法下载可关注后私信领取。关注免费领取整理好的数据集资料&#xff01;今天分享…

2024第十五届蓝桥杯 JAVA B组

目录 前言&#xff1a;试题 A: 报数游戏试题 B: 类斐波那契循环数试题C:分布式队列 前言&#xff1a; 没参加这次蓝桥杯算法赛&#xff0c;十四届蓝桥杯被狂虐&#xff0c;对算法又爱又恨&#xff0c;爱我会做的题&#xff0c;痛恨我连题都读不懂的题&#x1f62d;,十四届填空只…