python数据结构与算法 34 归并排序

VB中三种排序方法 用冒泡法,选择法,比较法三种方法对一组数进行排序。 立即下载

归并排序

在提高排序算法性能的方法中,有一类叫做分而治之。我们先研究其中第一种叫做归并排序。归并排序使用递归的方法,不停地把列表一分为二。如果列表是空或只有一个元素,那么就是排好序的(递归基点),如果列表有超过1个的元素,那么切分列表并对两个子列表递归使用归并排序。一旦这两个列表排序完成,称为“归并”的基本操作开始执行。归并是把两个有序列表合并成一个新的有序列表的过程。图10是我们熟悉的列表样例分解过程,图11是归并的过程。


图10  切分过程

图11  归并过程

以下是mergeSort函数。函数开始查询基点,如果列表长度小于等于1,那么已经是有序的不需要进一步处理,否则,长度大于1,就要用列表的切片操作分拆成左半部和右半部。注意列表的元素数量未必是个偶数,那没关系,长度相关最大也不超过1个。

def mergeSort(alist):
    print("Splitting ",alist)
    if len(alist)>1:
        mid = len(alist)//2
        lefthalf = alist[:mid]
        righthalf = alist[mid:]

        mergeSort(lefthalf)
        mergeSort(righthalf)

        i=0
        j=0
        k=0
        while i<len(lefthalf) and j<len(righthalf):
            if lefthalf[i]<righthalf[j]:
                alist[k]=lefthalf[i]
                i=i+1
            else:
                alist[k]=righthalf[j]
                j=j+1
            k=k+1

        while i<len(lefthalf):
            alist[k]=lefthalf[i]
            i=i+1
            k=k+1

        while j<len(righthalf):
            alist[k]=righthalf[j]
            j=j+1
            k=k+1
    print("Merging ",alist)

alist = [54,26,93,17,77,31,44,55,20]
mergeSort(alist)
print(alist)

mergeSoft函数被调用处理左半个表和右半个表时(8-9行),假设他们是排好序的。函数的其他部分(11-31行)负责把两个排好序的列表合并成一个有序表。注意合并的操作把元素放在原表(alist)的后面,一次取一个最小的元素。

mergeSort函数在第2行使用了一个print语句来显示每次调用的列表的内容。在32行也有一个print语句来显示归并处理。它的副本显示了函数处理样例列表的结果(最行一行?)。注意列表里44,55和20没有平均切分,第一次切分多出了[44],第二次多出了[55,20]。容易看得出,切分过程产生的列表可以立即与另一个有序表合并。

要分析mergeSort函数,需要考虑函数中两个分立的过程。第一个,把列表一分为二,我们已经在二分查找中计算过了,对于长为n的列表,需要logn的时间来切分。第二个是归并过程。列表中每个元素都要被处理并放在有序表中,所有归并操作n个元素的列表,需要n步操作。这样结果就是,logn步操作,每步操作包括n步归并,所以最终为nlogn。

回想列表切片的操作,如果切片大小是k,那么这个操作的性能是O(k),为了保证mergeSoft的性能是O(nlogn) ,我们需要清除切片操作。这样,我们需要简单地将开始和结束的索引值连同列表一起传递给递归过程。这个修改留作练习。

要注意的是,mergeSoft函数需要额外的内存来保存切出的两个子表,当数据集很大时,问题会变得很严重。


VB 递归算法例子 VB 递归算法例子的源程序代码,递归,当N="输入的数值"的时候,生成对应的三角形,数字上经常有的算法。生成的效果请看源码爱好者测试截图 立即下载

相关推荐

vb 简单快速排序

vb.net 语言 开发的简单快速排序,里面附带工程文件,打开便可以运行,附带截图!用Visual Studio 2010 以上版本打开

【Python】教你彻底了解Python中的数据结构与算法

​​​​。

Easonmax的博客 4079

七种常见的VB排序算法示例程序

七种常见的VB排序算法示例程序 包含常见的几种算法,只不过用VB来实现

34、归并排序-Python

归并排序 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法); 自下而上的迭代; 在《数据结构与算法 JavaScript 描述》中,作者给出了自下而上的迭代方法。但是对于递归法,作者却认为: However, it is not possible to do so

weixin_43927540的博客 175

冒泡排序VB版

冒泡排序VB.NET版,重温简洁版。有需要的可以下载。谢谢评价

​​WPF入门与XAML基础:从零开始构建你的第一个WPF应用​

本文是WPF入门系列首篇,详细介绍WPF的核心优势与开发环境搭建。通过创建第一个WPF项目,解析MainWindow.xaml和App.xaml等关键文件,深入讲解XAML基础语法,包括属性赋值、命名空间和事件绑定。最后通过按钮点击交互示例演示WPF应用程序运行流程,帮助开发者快速上手WPF开发,为后续学习布局系统和数据绑定等高级主题奠定基础。

Hare的博客 3278

高频面试题——算法与数据结构Python实现

快速排序 参考:快速排序partition过程常见的两种写法+快速排序非递归实现 def partition(arr, low, high): pivot = arr[low] #选第一个元素作为枢纽元 while low < high: while low < high and arr[high] >= pivot: high-...

pyxiea 1034

深入浅出SSD:固态存储核心技术、原理与实战(文末赠书)

作为经典畅销书的升级版,本书在第1版的基础上新增了大量新知识(如闪存、UFS、测试、文件系统等),并改写或删减了许多过时或不适用的内容,总修改量超过60%。本书由SSD技术社区SSDFans的核心团队成员联合业界、高校SSD方面的专家共同完成,相对于第1版,内容更全面、更新,也更有深度。本书从产品、技术和应用3个维度展开,全面、详细讲解了SSD的发展历史、产品形态、工作原理、整体架构,以及各个功能模块的原理和使用,从SSD的前端接口协议到FTL算法,再到后端的闪存和纠错,以及测试,本书都有涉及。

阿玥的小博客 3122

Python数据结构(十五):归并排序详解

归并排序是一种基于分治思想的稳定排序算法,具有可预测的时间复杂度O(n log n),适合处理大规模数据和外部排序场景。归并排序的基本思想可以概括为:将待排序数组递归地分成两半,分别对两半进行排序,然后将两个有序的子数组合并成一个有序数组。归并排序是一种高效、稳定的排序算法,基于分治思想设计,具有可预测的时间复杂度,适合处理大规模数据和需要稳定排序的场景。归并排序的时间复杂度非常稳定,无论输入数据的初始状态如何,都需要O(n log n)的时间。上面的实现创建了多个新列表,内存开销较大。

2302_77468438的博客 621

CANoe之UDS诊断自动化测试(四):创建诊断自定义Panel发送诊断(替代Session Control窗口)

通过自定义的Panel界面实现诊断发送的功能,并且还可以根据自己的测试需求添加需要的诊断信息,使用非常灵活。

weixin_69677286的博客 1904

你不知道的Postman的Mock接口测试,看这一篇就够了

创建Mock服务你可以从Postman已有的测试集(Collection)中创建Mock Server或者直接创建Mock Server(我们这里选择从已有的测试集中创建Mock Server)Mock server详细配置页面,在此页面中我们可以设置:命名Mock Server选择一个环境(可选的),我们可以选择之前设置过的环境,Mock Server将会使用对应环境中设置过的变量在对应的请求和响应中如果想要将Mock Server设置私有访问的,那么可以勾选此选项,不勾选则对所有人可见。

654

Python学习算法系列(5):归并排序与堆排序

归并排序:是一种稳定的排序算法,适用于大规模数据,时间复杂度为 O(n log n),但需要额外的空间来存储中间数组。堆排序:是一种原地排序算法,空间复杂度 O(1),适用于大规模数据,尽管时间复杂度也是 O(n log n),但性能通常不如快速排序。排序算法优化:对于大规模数据,归并排序和堆排序是非常有效的选择。📢下一篇 Python学习算法系列(6):基数排序与计数排序,敬请期待!🚀💡。

Azperk的博客 507

Python 爬虫实战:赛事分析平台构建与比赛数据抓取

在体育赛事日益丰富的今天,对比赛数据的收集与分析对于运动员、教练团队以及体育爱好者都具有重要意义。通过构建一个赛事分析平台,我们可以系统地抓取、整理和展示各类比赛数据,为用户提供全面的赛事洞察。本文将深入讲解如何利用 Python 爬虫技术实现这一平台的构建,涵盖从目标网站分析到数据可视化展示的全过程。

u014481728的博客 3180

最新Python数据结构与算法教程

适用人群 Python初、中级学习者和开发者,对Python数据结构和算法感兴趣的学生和开发者。 课程概述 Python目前在人工智能,运维,后端开发,爬虫等领域使用越来越广泛,而数据结构和算法是计算机科学的基础知识。本课程使用Python语言系统讲解了常用数据结构和算法,帮助学习者提升开发技能。 课程特点: 1.每个算法和数据结构都有讲义、视频(包含讲解、图示、手动模拟)、源...

qq_46241791的博客 502

unity6000.0.3版本URP下ScriptableRendererFeature如何实现一张自定义贴图效果?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 584

ADS基础教程20 - 电磁仿真(EM)参数化仿真

一、引言二、参数化设置1.参数定义2.参数赋值3.创建EM模型和符号四、总结1)在Layout视图,菜单栏中选中EMComponent2)在弹出的参数编辑框中,采用标称/扰动()设计。使用子网(Subnetwork)参数。这些方法是互斥的,在为单个组件定义参数时不能将它们组合起来。标称/扰动(Nominal/Perturbed)参数使用平面化布局场景,并且只包含端口和原始图形形状(如多边形、矩形和圆形)时定义。

XZ_ZC的博客 4029

python归并排序算法_数据结构与算法:归并排序(原理讲解+python实现)

归并排序归并排序是一种常见并且广泛运用的排序算法。由于其采用了二叉树层级的理念从而降低时间复杂度 充分提升了性能。常见的我们会运用递归来写归并排序的代码 其实通过迭代的方式来实现归并排序不失为一种好的方式。原理讲解归并排序基于分治策略(Divide and Conquer Stretegy)实现。分:先将要排序长度为n的列表或者数组折中分成两个子列表或者数组长度分别为(n/2) 第二次则分别将子序...

weixin_39726267的博客 236

5、快速入门

点击启动实例按钮,并设计一个business key,每个实例会有一个business key, 业务主键,也相当于一个流程实例唯一key,一般会与一次业务强相关,比如一个订单号 ,此处取为shopping_1;付款程序完成后会流转到物流发货任务,此时java工程的相应订阅会收到任务,并进入断点,且读到到toWhere变量。单击shopping可以进入实时流程图的执行图,此时流程流转到第一个任务,需要业务系统完成此任务,并通知引擎。添加类,分别订阅流程中的加入购物车任务和物流发货任务。

leyoliu的博客 3501

【Python知识地图】数据结构与算法:排序算法

排序算法是计算机科学中的基本算法之一,用于将一组数据按照特定顺序排列。常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。本文将详细介绍这些排序算法的基本概念、操作和实现,并提供一些示例代码。

科技改变人类,技术成就未来 663

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python实现归并排序算法

摘要: 本文主要介绍的是python实现归并排序算法,本文首先会介绍归并排序的原理,并以一张思维导图来加深读者对该算法过程的理解,紧接着进行代码的实现。最后介绍该算法的时间复杂度。 一.原理: 1.将一个序列从中间位置分成两个序列; 2.在将这两个子序列按照第一步继续二分下去; 3.直到所有子序列的长度都为1,也就是不可以再二分截止。这时候再两两合并成一个有序序列即可。 ...

WHY380012801的博客 278

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

python数据结构谁讲得好_非常难得Python好课-基于Python的数据结构与算法视频教程 Python数据结构精讲教程...

非常难得Python好课-基于Python的数据结构与算法视频教程 Python数据结构精讲教程1.JPG (42.29 KB, 下载次数: 0)2019-11-5 00:01 上传3.JPG (38.01 KB, 下载次数: 0)2019-11-5 00:01 上传2.JPG (44.02 KB, 下载次数: 0)2019-11-5 00:01 上传数据结构与算法相信大家都不陌生,但在以往有很多...

weixin_39851008的博客 138

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

python数据结构和算法视频教程_基于Python的数据结构与算法视频教程,Python数据结构精讲教程下载...

课程名称非常难得Python好课-基于Python的数据结构与算法视频教程 Python数据结构精讲教程数据结构与算法相信大家都不陌生,但在以往有很多基于JAVA或C等语言的数据结构与算法课程却鲜有基于Python来讲解的数据结构与算法课程,这跟过去几年Python的火热却形成了鲜明的反差不过原因不是我们讨论的重点,技术和学习才是我们的最重要的任务,那么这套非常难得的Python数据结构与算法课程...

weixin_39683163的博客 273

第38天:Python数据结构算法:排序与查找算法

本文介绍了常见的排序算法(冒泡排序、选择排序、快速排序、归并排序)和查找算法(顺序查找、二分查找),包括它们的Python实现、时间复杂度和适用场景。排序算法用于数据组织,查找算法用于数据检索,选择合适的算法能显著提升程序性能。文章还提供了算法比较表格,并预告了后续将学习图算法和最短路径算法。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 284

视频教程-Python数据结构与算法视频教程-Python

Python数据结构与算法视频教程 知乎 Python 后端工程师。 htt...

weixin_30844801的博客 706

数据结构与算法之排序算法总结(python版本)

数据结构与算法之排序算法总结(python版本)排序算法性能比较1.插入排序(Insertion Sort)功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 排序算法性能比较 参考了王卓老师的数据结构与算法课程(数据结构与算法课程-

qq_36059536的博客 587
上一篇: python数据结构与算法 33 希尔排序
下一篇: python数据结构与算法 35 快速排序
杀了这个男孩
博客等级 码龄18年 149粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值