数据结构-排序算法二

OPC UA 服务端的模拟工具及客户端工具 详细介绍如何使用 Prosys OPC UA Simulation Server 作为 OPC UA 服务端的模拟工具来生成数据模型,并使用 Softing OPC UA Client 作为客户端工具,直观地查看和验证模拟生成的数据。 阅读详情

归并排序

归并排序是采用分治法的一个非常典型的应用。归并排序的思想是先递归分解数组,再合并数组。
将数组分解为最小后,合并两个有序数组,基本思路是比较两个数组最前面的数,谁小就先取谁,取出后相应的指针就往后移一位,然后再比较,直到一个数组为空,然后把另一个数组的剩余部分复制过来即可。

在这里插入图片描述

def merge_sort(lis):
    n = len(lis)
    if  n <= 1:
        return lis

    mid = len(lis) // 2

    left_lis = merge_sort(lis[:mid])
    right_lis = merge_sort(lis[mid:])

    l_index, r_index = 0, 0
    r = []
    while l_index < len(left_lis) and r_index < len(right_lis):
        if left_lis[l_index] < right_lis[r_index]:
            r.append(left_lis[l_index])
            l_index += 1
        else:
            r.append(right_lis[r_index])
            r_index += 1
    r += left_lis[l_index:]
    r += right_lis[r_index:]
    return r


if __name__ == '__main__':
    l = [54,26,93,17,77,31,44,55,20]
    result = merge_sort(l)
    print(result)

搜索

搜索是在一个项目集合找到一个特定项目的算法过程。搜索得到的结果是真或假。常见的搜索算法:顺序查找、二分法查找、二叉树查找、哈希查找。

二分查找

二分查找又称折半查找,优点是比较次数少,查找速度快,缺点是要求待查找的表为有序的,且插入删除困难。因此折半查找法适用于不经常变动而查找不频繁的有序列表。首先,假设表中元素是升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则,利用中间位置记录将表分成两部分,如果中间位置的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直知道子表不存在为止,此时查找不成功,返回False。

在这里插入图片描述

非递归方法

def binary_search(lis, item):
    # 为实现折半,引入两个指针
    first = 0
    last = len(lis)
    while first < last:
        mid = (first + last) // 2
        if item == lis[mid]:
            return True
        elif item < lis[mid]:
            last = mid - 1
        else:
            first = mid + 1
    return False

if __name__ == '__main__':
    l = [0, 1, 2, 8, 13, 17, 19, 32, 42, ]
    print(binary_search(l, 10))
    print(binary_search(l, 2))

递归方法

def recursion_binary_sort(lis, item):
    mid = len(lis) // 2 # 4
    if len(lis) <= 0:
        return False
    else:

        if lis[mid] == item:
            return True
        elif item < lis[mid]:
            return recursion_binary_sort(lis[:mid], item)
        else:
            return recursion_binary_sort(lis[mid + 1:], item)


if __name__ == '__main__':
    l = [0, 1, 2, 8, 13, 17, 19, 32, 42]
    print(recursion_binary_sort(l, 0))
    print(recursion_binary_sort(l, 32))
微信小程序 - 最新获取用户昵称 / 头像(wx.getUserProfile 接口被废弃后的代替方案)详细教程,2022 年之后的所有微信小程序,获取用户信息最新详细教程,附带示例源代码 微信小程序wx.getUserProfile接口废了用什么代替,微信小程序wx.getUserProfile不能用了怎么办,wx.getUserProfile失效有什么替代方案吗,微信新规定头像昵称填写最新教程,目前微信小程序最新获取用户头像昵称教程,微信小程序用户头像昵称获取规则调整公告,2022改版后的微信小程序如何获取用户头像和昵称信息,微信小程序官方废弃getUserProfile后如何实现获取用户信息,微信小程序wx.getUserProfile接口返回了默认头像昵称,微信小程序获取用户信息不 阅读详情

相关推荐

国产操作系统替换方案:3个避坑指南

坑核心误区避坑核心原则关键动作坑一:选型只看信创信创目录=唯一标准兼容性优先,信创是约束三维评估(兼容性+信创+生态),分场景选型坑二:迁移只管能跑功能能跑=迁移成功性能确认+运维回归适配-压测-回归三阶段,基线对比坑三:不防二次迁移解决停服=完成任务一步到位,两级兼容信创路线优先,双轨制发布,终态规划。

weixin_43524706的博客 294

【数据结构】排序算法篇二

1. 快速排序(hoare版本) (1)基本思想: (2)动态图解: (3)代码实现: (4)特性总结: 2. 快速排序(推荐:前后指针版本) (1)基本思想: (2)动态图解: (3)静态图解(一趟): (4)代码实现: 3. 快速排序(挖坑法) (1)具体步骤: (2)静态图解: (3)动态图解: (4)代码实现: 4. 计数排序 (1)基本思想: (2)具体步骤: (3)代码实现: (4)特性总结: 5. 归并排序(递归法) (1)基本思想: (2)动态图解: (3)代码实现: (4)辅助理解:

2303_80737493的博客 2965

数字摄影与摄像中的图像信号处理器(ISP):流程与经典算法详解

图像信号处理器(Image Signal Processor, ISP)是现代数字成像系统(如智能手机、数码相机、网络摄像头等)中的核心组件,扮演着将图像传感器(如CMOS或CCD)捕获的原始光电信号转换为高质量、可供观看或进一步处理的数字图像的关键角色。在数字摄影和摄像的整个链路中,光线首先通过镜头(Lens)聚焦到图像传感器上,传感器将光信号转换为模拟电信号,随后经过模数转换(A/D转换)变为原始的数字图像信号。

qq_44682523的博客 3722

数据结构与算法 实验二 排序算法

定义一最大长度为20的结构体数组(可以在结构体中只定义关键字域),从键盘输入结构体数组各元素的关键字值,以输入-9999为结束,对该数组中的元素按关键字非递减的顺序进行排序,分别用冒泡排序,非递归的快速排序,递归的快速排序方法完成,再用折半查找方法对已经有序的结构体数组进行操作,输入一待查记录关键字,若查找成功输出“success”,查找不成功则输出“unsuccess”,以上各功能模块均用函数实现。设计相应算法并分析各排序方法的效率。 该程序运行情况举例说明: 运行主界面如下图所示:提示用户输入相应选

weixin_64234293的博客 1262

使用STC15F104W产生PWM脉冲

最近的小项目中使用到了STC15F104W产生PWM脉冲

yeats1989的专栏 1万+

扩增子分析|溯源分析在R中的复现:跟着Nature系列文章利用FEAST溯源分析包追溯微生物群落的起源

溯源分析由Liat Shenhav等人在2019年发表在Nature Methods杂志,他们开创的一种分析微生物群落组成结构的方法,通过量化不同微生物样本(来源)在目标微生物群落(汇)中的比例或分数识别微生物群落的潜在来源。该方法自发表以来受到微生物学界广泛关注,该论文截止2024年10月9日已经被引289次,是领域内高被引论文,该方法已经成为Nature,cell系列文章高度关注的方法。

weixin_46814750的博客 3433

数据结构与算法二、常见排序算法

前言 在数据结构与算法中有常见十大算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序。 1.冒泡排序 原理 冒泡排序的原理在于要么元素上浮,相邻元素间,如果右小于左,则交换,每次确认一位最小数。要么元素下沉,相邻元素间,如果左大于右,则交换,每次确认一位最大数。 实现 /** * 冒泡排序 * * @param a 待排序元素数组 */ public static void bubbleSort(int

陌里兮如故 187

OpenMythos深度解析

本文深入解析了kyegomez/OpenMythos项目如何从第一性原理重建Claude Mythos的核心架构。该项目并非直接复制Claude,而是基于公开论文和实验结果推测其可能的设计理念,构建了包含多模态注意力、深度推理引擎、知识检索模块等六大核心组件的模块化架构。重点剖析了分组查询注意力(GQA)的实现细节,展示了KV头扩展等关键技术。该项目已成为大模型开源社区最受关注的研究之一,为理解Claude的架构思想提供了有价值的参考。

Crown_22的博客 518

C语言数据结构——常见排序算法(二)

在探索计算机科学的旅途中,排序算法无疑占据了一席重要的地位,它们不仅是理解数据结构与算法设计的基石,更是提高程序性能的关键工具。继常见排序算法(一)对插入排序、选择排序及其相关变种进行了深入的讲解之后,本篇文章旨在进一步扩展我们的视野,探讨如交换排序、归并排序和非比较排序等更多高效的排序策略。通过对这些高级排序技术的剖析,我们将揭示它们背后的设计思想、性能特点及适用场景,以加深对排序算法多样性和复杂性的理解。

wxk2227814847的博客 1413

基于STM32F4XX 、HAL库的GXHT30C温湿度传感器驱动应用C语言程序设计

define GXHT30C_STATUS_WRITE_CHK (1 << 0) // 写数据校验状态。#define GXHT30C_STATUS_HUMI_TRACK (1 << 11) // 湿度跟踪报警。#define GXHT30C_STATUS_TEMP_TRACK (1 << 10) // 温度跟踪报警。#define GXHT30C_STATUS_CMD_STATUS (1 << 1) // 命令执行状态。

PP_Cottage的博客 226

2026年1至9月武汉市房地产价格深度分析报告

本报告基于2026年1月至9月武汉市实际成交案例,从成交价格、区域分布、户型结构、价格走势等维度进行深度分析。数据来源包括武汉市住房保障和房屋管理局备案数据、主要中介机构成交记录及典型楼盘网签案例,覆盖全市15个行政区及主要功能板块。

王国平的博客 327

数据结构——九大排序算法二

如果要转载,需要注明出处: http://blog.youkuaiyun.com/xiazdong 本文是 http://blog.youkuaiyun.com/zhangjikuan/article/details/46793763 的补充,当年看了《大话数据结构》总结的,但是现在看了《算法导论》,发现以前对排序的理解还不深入,所以打算对各个排序的思想再整理一遍。 本文首先介绍了基于比较模型的排

zhangjikuan的专栏 723

低轨通信 | 手机直连低轨卫星通信:架构、关键技术与未来展望

手机直连低轨卫星通信正推动人类进入"全域连接"时代。当中国星网GW星座与千帆星座的万颗卫星点亮夜空,当普通智能手机在珠峰之巅仍能流畅视频通话,当远洋渔船通过卫星物联网实现精准捕捞——这些场景不仅重构通信产业格局,更将深刻改变人类生产生活方式。正如工信部《指导意见》所规划,到2030年我国将发展超千万卫星通信用户,催生万亿级新市场[1][5]。在这场太空基建竞赛中,技术创新与标准制定的双重突破,将决定未来数字文明的星空版图。

尘世冰封的专栏 937

数据结构之排序算法(二)

排序算法 归并排序(O(nlogn)) 基本思想: 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。首先考虑下如何将2个有序数列合并。只要比较2个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。 合并两个有序数组的代码如下: //将有序数组a[]和b[]合并到c[]中 pub...

Light_Heart 182

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

浅谈算法和数据结构: 二 基本排序算法

浅谈算法和数据结构: 二 基本排序算法 本篇开始学习排序算法。排序与我们日常生活中息息相关,比如,我们要从电话簿中找到某个联系人首先会按照姓氏排序、买火车票会按照出发时间或者时长排序、买东西会按照销量或者好评度排序、查找文件会按照修改时间排序等等。在计算机程序设计中,排序和查找也是最基本的算法,很多其他的算法都是以排序算法为基础,在一般的数据处理或分析中,通常第一步就是进行排序,比如说二分查找,...

m0_37316406的博客 173

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

数据结构与算法二之排序算法

七、排序算法时间复杂度常见排序算法(八种)冒泡排序选择排序插入排序希尔排序快速排序归并排序基数排序 时间复杂度 引出:时间频度: 一个算法中的语句执行次数称为语句频度或时间频度。记为 T(n)。 T(n)的求解:1、忽略常数项。 2、忽略低次项 。3、忽略系数。 例如:T(n) = 3n^2+3n+6 ——>n^2 时间复杂度: f(n):即三忽略后的辅助函数。 T(n) / f(n) 的极...

Rhin0cer0s的博客 298

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

数据结构基础 排序算法(二) 概念篇

六、鸡尾酒排序/双向冒泡排序 1)算法简介         鸡尾酒排序等于是冒泡排序的轻微变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。 2)算法描述和分析      1、依次比较相邻的两个数,将小数放在前面

稚枭天卓 1756

数据结构初阶:排序算法(二)交换排序

本文介绍了两种交换排序算法:冒泡排序和快速排序。冒泡排序通过相邻元素比较交换实现排序,时间复杂度O(n²)。快速排序是更高效的算法,采用分治思想,介绍了三种实现方式:1)Hoare版本通过左右指针划分;2)挖坑法通过移动坑位完成分区;3)前后指针法利用双指针遍历。文章还分析了快速排序的递归和非递归实现,非递归版本使用栈结构存储区间信息。两种算法的时间复杂度分别为:冒泡排序O(n²),快速排序最优情况O(nlogn),最坏O(n²)。空间复杂度方面,冒泡为O(1),快速排序递归版为O(logn)。

2302_80761497的博客 1116

数据结构和算法之五:排序算法二

数据结构基础之排序算法二 学习算法,排序算法当然是不能少的,这次我们来学习一下基础的选择排序,冒泡排序,以及大名鼎鼎的快速排序。 选择排序 选择排序,非常好理解,就是找最小的数放到第一位,然后从第二个数开始找最小的数,放到第二个位置,然后从第三个数开始找最小的数,放到第三个位置… 。每次找最小的数,就是选择最小的数,这就是选择的含义。 看个图就明白了 第一次,找到最小的数字1,放到第一个位置上(当然原来在第一个位置的元素就交换到原来数字1的位置上了);第二次,从第二个位置也就是6开始,找到最小的数字2,放

老周(重庆)的博客 220

数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)

我的上一篇文章向大家介绍了排序算法中的冒泡排序、插入排序和选择排序。它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性。下图是这三种算法的比较,不熟悉的同学也可以点击我的上一篇文章回顾一下。小R同学:[数据结构与算法系列]排序算法(一)​zhuanlan.zhihu.com 由于它们的时间复杂度都比较高,所以在处理大规模数据的时候这三种算法就...

weixin_39667080的博客 499

数据结构—排序算法篇二

本期是对排序的深入讲解,排序能让我对循环和递归的第二次理解,让我们重新感受到循环和递归的强大!学完排序感觉脑子在燃烧,这可能就是对编程的热爱吧。

moxuezhendecai的博客 465

数据结构与算法:排序算法(二)

前言 本文主要讲解排序算法 数据结构与算法文章列表 数据结构与算法文章列表: 点击此处跳转查看 目录 (一)排序算法的介绍 排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程 常见的排序算法有:冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序等 (二)快速排序 (1)快速排序法介绍 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况

分享计算机基础,android,C/C++,音视频等内容 354

java数据结构和算法②——排序算法

不引入第三个变量交换两个变量的值 a = a + b b = a - b a = a - b 1.冒泡排序:其核心就是两两比较,但是不是和所有人比价你 public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int data[] = new i...

ww0peo的博客 143

数据结构学习二:四种排序算法

数据结构学习二:四种排序算法选择排序排序思想时间复杂度插入排序排序思想时间复杂度冒泡排序排序思想时间复杂度快速排序排序思想时间复杂度 选择排序 排序思想 将一组数列分为两组:有序组和无序组,最初整个数列都是无序组。从无序组中找到最大的或最小的那个值追加到有序组中,不断重复,直到无序组中所有数值都追加到有序组中,排序就结束了。 也就是从无序组中选择合适的数值放到有序组中。 时间复杂度 O(n2) 插入排序 排序思想 将一组数列分为两组:有序组和无序组,最初整个数列都是无序组。取无序组中的第一个数值,

i__0o0__的博客 507

数据结构之排序算法二

1.快速排序 快速排序(Quick Sort)的基本思想是:通过不断比较关键码,以某个记录为界(该记录称为支点) ,将待排序列分成两部分。其中,一部分满足所有记录的关键码都大于或等于支点记录的关键码,另一部分记录的关键码都小于支点记录的关键码。把以支点记录为界将待排序列按关键码分成两部分的过程,称为一次划分。对各部分不断划分,直到整个序列按关键码有序为止。 设待排序的顺序表 sqList 中有...

weixin_30635053的博客 88

数据结构与算法——排序算法(二)

数据结构与算法——排序算法(二) 1、归并排序 1.1 基本思想 归并排序是利用分治的策略,将原始的数组分解成小的数组然后进行递归排序的过程。该策略主要包括两个部分,第一个部分是分 , 第二个部分是治。分就是将原始的数组分解成若干个小的数组,治就是将小的的数组合并成有序的过程。类似于下图所示: 根据上图所示,我首先经历的是一个分的过程,我们数据分解成单个元素构成的数组的时候,此时数组中的元素就是...

hei653779919的博客 198
上一篇: 数据结构排序算法一
下一篇: 数据结构-树
shell-x
博客等级 码龄7年 16粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值