首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我正在尝试用python编写一个mergesort,但是当我输入不同的列表时,输出是不同的。

问题描述:我正在尝试用Python编写一个mergesort,但是当我输入不同的列表时,输出是不同的。

回答: mergesort(归并排序)是一种经典的排序算法,它将一个列表分成两个子列表,分别对子列表进行排序,然后将两个有序的子列表合并成一个有序的列表。这个算法的时间复杂度为O(nlogn),在处理大规模数据时具有较好的性能。

然而,当你输入不同的列表时,可能会导致输出不同的结果。这是因为归并排序的实现方式可能存在一些问题,例如在合并两个子列表时的策略选择、边界条件的处理等。

为了解决这个问题,你可以检查你的mergesort实现是否正确。以下是一个基本的mergesort实现示例:

代码语言:txt
复制
def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    
    mid = len(arr) // 2
    left = arr[:mid]
    right = arr[mid:]
    
    left = merge_sort(left)
    right = merge_sort(right)
    
    return merge(left, right)

def merge(left, right):
    result = []
    i = j = 0
    
    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    
    result.extend(left[i:])
    result.extend(right[j:])
    
    return result

你可以使用这个实现来测试不同的列表,看看是否能够得到正确的排序结果。如果仍然存在问题,你可以检查以下几个方面:

  1. 确保输入的列表是可比较的元素类型,例如数字或字符串。如果列表中包含不可比较的元素(如字典),则需要修改比较逻辑。
  2. 检查merge函数的实现是否正确。它应该能够正确地合并两个有序的子列表。
  3. 确保在递归调用merge_sort函数时,传入的子列表是正确的。你可以在每次递归调用前打印子列表,以确保它们是正确的。

如果你仍然无法解决问题,可以提供更多的代码和具体的输入输出示例,以便我们能够更好地帮助你排查错误。

推荐的腾讯云相关产品:腾讯云函数(Serverless Cloud Function) 腾讯云函数是一种事件驱动的无服务器计算服务,可以帮助开发者在云端运行代码,无需关心服务器的管理和维护。你可以使用腾讯云函数来部署和运行你的Python代码,包括mergesort算法。腾讯云函数提供了高可用性、弹性扩展、按需付费等优势,适用于处理各种类型的任务和应用场景。

腾讯云函数产品介绍链接地址:https://cloud.tencent.com/product/scf

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

笨办法学 Python · 续 练习 26:`hexdump`

相信我,这些替代工作几乎不可能,通常不会成功,但自动测试有帮助。 这个练习中,你会向你流程添加下面这些: 在你需要实现场景中,编写一个试用例,运行原始hexdump。...注 当我说“先写一个测试”意思并不是一个庞大test.py文件,它具有所有的函数和大量虚构代码。意思以前教过东西。...以下Python .pyc文件hexdump -C输出前几行: 真正困难在于为每个不同选项正确格式化输出,以便它能够正确打印并适合屏幕。...如果可以的话,可以制作一个他们都使用库。 深入学习 有人主张只做“测试优先”开发,但我相信没有永远适用技术。当我从用户角度测试软件交互更喜欢写测试。...编写测试,它描述了用户与软件交互,然后实现软件。这是你所做事情,因为你正在测试,用户如何从你hexdump命令行调用中看到输出

40220

python hexdump_笨办法学 Python · 续 练习 26:`hexdump`

大家好,又见面了,你们朋友全栈君。 练习 26:hexdump 你已经用xargs完成了热身,现在正在代码/审计循环中。你现在将尝试以“测试优先”方式完成下一个挑战。...注 当我说“先写一个测试”意思并不是一个庞大test.py文件,它具有所有的函数和大量虚构代码。意思以前教过东西。...以下Python .pyc文件hexdump -C输出前几行: 真正困难在于为每个不同选项正确格式化输出,以便它能够正确打印并适合屏幕。...如果可以的话,可以制作一个他们都使用库。 深入学习 有人主张只做“测试优先”开发,但我相信没有永远适用技术。当我从用户角度测试软件交互更喜欢写测试。...编写测试,它描述了用户与软件交互,然后实现软件。这是你所做事情,因为你正在测试,用户如何从你hexdump命令行调用中看到输出

38420

初学者练手项目

现在,当我们准备好库和警报歌曲,让我们看看如何编写程序以使用Python创建闹钟: 电子邮件切片器 要使用Python创建电子邮件切片器,我们任务编写一个程序,该程序可以检索电子邮件用户名和域名...将首先将故事各个部分存储在不同列表中,然后可以使用Random模块来选择存储在不同列表故事随机部分: 在上面的代码中,可以在某些方面进行改进,但从根本上讲,它可以满足当今标准中许多安全密码生成要求...这是一个很长列表但是出于我们目的,我们将使用random.randint()函数。此函数根据我们指定开始和结束返回一个随机整数。  骰子掷骰最小值1,最大值6,该逻辑可用于模拟骰子掷骰。...接收多个用户输入 Pythoninput()函数可帮助我们在编写程序时向用户提供输入但是如何在终端中接受多个用户输入呢?...您可能正在接受输入以发送到数据库,或者正在读取要在计算中使用数字。 无论目的是什么,您都应该编写一个循环,以从键盘上键入用户读取一个或多个用户输入,并为每个输出打印结果。

2.6K40

软件测试测试开发|常见软件测试框架类型:TDD、BDD、DDD、ATDD、DevOps介绍

测试驱动开发(TDD)测试驱动开发一种开发方法,其核心理念编写实际代码之前先编写试用例。这些测试用例描述了所期望代码行为。开发者根据这些测试用例来编写代码,以确保代码通过所有测试并符合预期。...对于一个业务模型及其复杂、内部模块之间相互依赖性非常强项目,采用TDD反而会得不失,这会导致程序员在拆分接口和写测试代码时候工作量非常大。...数据驱动测试(DDT)数据驱动测试一种测试方法,它允许在相同测试代码下使用不同输入数据进行多次测试。这样可以减少代码重复,提高测试覆盖率。...BDD旨在消除TDD过程中可能造成问题。与TDD相比,BDD通过编写行为和规范来驱动软件开发。 行为和规范可能看起来与测试非常相似,但是它们之间却有着微妙但重要区别。...Given(给予操作条件)-When(执行相关操作)-Then(得到预期结果)用来编写试用方法:Given(给予操作条件):用户输入有效登录凭证When(执行相关操作):用户点击登录按钮Then

28910

别再忽视数组排序重要性了

优缺点分析不同排序算法各有优缺点,下面一些排序算法优缺点:冒泡排序:简单易懂,代码实现简单,但是时间复杂度较高,不适用于大规模数据排序。...以上示例代码中,使用JUnit框架编写了针对数组排序算法单元测试用例,确保排序算法正确性和效率。  这段代码一个用于测试排序算法程序。...其中包含了不同种类排序算法,如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序。程序会将一个包含9个元素整型数组传入这些排序算法中进行排序,并输出排序后结果。...在选择排序算法,需要根据实际情况来选择最适合排序算法,不同排序算法各有优缺点。同时,为了验证排序算法正确性和效率,可以编写相应试用例进行验证。...⭐️若有疑问,就请评论留言告诉叭。正在参与我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

22131

数据科学家令人惊叹排序技巧

Timsort源自归并排序和插入排序,它会根据需要排序数据特征选择排序方法。比如,需要排序一个列表,就选择插入排序方法。...关于这个库,其 github 地址: https://github.com/dask/dask 如果小数据集,采用 Pandas 进行排序一个不错选择,但是数据量很大时候,想要在 GPU 上并行搜索...Tensor, LongTensor 输出元祖,可用于作为输出缓存。...但不幸尝试在谷歌 Cola 上通过 Numpy 构建一个 1.1M * 100 K 随机数据集时候出现内存不足错误,然后尝试用 GCP 416 MB,出现同样内存不足错误。...本文介绍了在不同 Python 库和 SQL 进行排序方法,一般来说只需要记得采用哪个参数实现哪个操作,然后下面一些建议: 对比较小数据集,采用 Pandas 默认 sort_values

1.2K10

【深度学习】深度学习中单元测试

测试输入范围很广,通常包括边界和边缘情况。这些输入输出通常由开发人员手动计算,以测试被测试单元输出。 例如,对于加法器函数,我们将有如下测试用例。(稍后我们将看到一个深度学习示例。)...你可以用正输入、零输入、负输入、正输入和负输入试用例。 如果我们正在测试函数/方法输出与单元测试中为所有输入案例定义输出相等,那么你单元将通过测试,否则它将失败。...强制你编写具有明确定义输入输出模块化和可重用代码。因此,你代码将更易于集成。 提高了更改/维护代码信心。它有助于识别代码更改引入bug。...在unittest中,测试用unittest.TestCase。要生成测试用例,必须编写TestCase子类。...因为希望名称中带有001映像和mask出现在dataloader创建第一批索引0中。 从不同批次中检查不同样本索引将是一个更好测试,因为你将确保不同批次顺序一致

2.1K20

笨办法学 Python · 续 练习 13:单链表

除此之外,这是一个非常简单课程。最复杂__repr__函数。当你使用%r格式或在节点上调用repr(),这会打印调试输出。它应该返回一个字符串。...不同操作花费不同内存(空间)和时间,一些昂贵,另一些快速。SingleLinkedListNode结构使得一些操作非常快,但是许多其他操作非常慢。在实现过程中,你将会了解到它。...你会看到我已经遍历了每一个操作,并试图覆盖大部分边界情况,但是当我进行审计时,你会发现实际上可能错过了一些。人们常常不会对一些案例进行测试,例如“零个元素”和“一个元素”。...代码审核与之类似,因为你遍历每个函数,并分析所有输入参数,以及所有输出值。 要进行基本审计,你将执行此操作: 从你试用例开始。在这个例子中我们来审计test_push。...当你花了一两个 45 分钟会话来 Hack 它并试图让它工作,现在观看视频时候了。你首先需要尝试它,以便更好地了解正在尝试事情,这样可以使视频更容易理解。

41220

数据结构思维 第十七章 排序

通过使用类型参数T,我们可以编写一个方法,它在包含任何对象类型列表上工作。 insertionSort需要两个参数,一个任何类型List,一个Comparator,它知道如何比较类型T对象。...return null; } 这两种方法做同样事情,但提供不同接口。mergeSort获取一个列表,并返回一个列表,具有升序排列相同元素。...mergeSortInPlace修改现有列表void方法。 你工作填充mergeSort。在编写完全递归版本合并排序之前,首先要这样: 将列表分成两半。...将有序两部分合并为一个完整有序列表中。 这将给你一个机会来调试用于合并代码,而无需处理递归方法复杂性。...没有纠结于对数底,因为底不同对数差别在于一个常数,所以所有的对数都是相同增长级别。 O(nlogn)中算法有时被称为“线性对数”,但大多数人只是说n log n。

45140

笨办法学 Python · 续 练习 33:解析器

一开始,这个巨大列表只是一个空格分隔原始数据流。你大脑会自动在空格处拆分数字流并创建数字。你大脑像扫描器一样。然后,你将获取每个数字,并将其输入到具有含义行和列中。...我们再来看一下练习 32 中微型 Python 代码,再从三个不同角度讨论解析器: def hello(x, y): print(x + y) hello(10, 20) 当你查看这个代码...首先,当我们加载一个.py文件,它只是一个“字符”流 - 实际上字节,但 Python 使用Unicode,所以必须处理字符。这些字符在一行中,毫无结构,扫描器任务增加第一层次意义。...RDP 解析器代码看起来像你正在处理实际语法,只要遵循一些规则,它们就很容易编写。RDP 解析器两个缺点:它们可能不是非常有效,并且通常需要手动编写它们,因此它们错误比生成解析器更多。...BNF 语法 尝试从头开始编写一个 RDP 解析器没有某种形式语法规范,有点棘手。你还记得当我要求你将单个正则表达式转换成 FSM 吗?这很难吗?它需要更多代码,不只是正则表达式中几个字符。

57120

盘点一下 Python 和 JavaScript 主要区别(详细)

Python和JavaScript输入输出 要求用户输入并向用户显示值是非常常见操作,让我们看看如何用Python和JavaScript做到这一点: 输入Python中,我们使用 input(..., object[property]); } 当我们在Chrome开发者工具控制台中运行此代码输出为: ?...提示:这种类型循环保证代码将至少执行一次。 当我们要求用户输入时,这是特别有用,因为用户将被提示输入。如果输入有效,我们可以继续这个程序。...但是如果它无效,我们可以提示用户再次输入该值,直到它有效为止。 Python和JavaScript中函数 对于编写简洁,可维护和可读程序,函数非常重要。...此参数列表以 self 参数开头,以引用正在调用该方法实例。在此列表之后,我们编写一个冒号(:),并将该方法主体缩进。

6.3K30

用Numba加速Python代码

Benchmark game有一些比较不同编程语言在不同任务上速度可靠基准。 解决这个速度问题一个常见方法用C++之类快速语言重新编写代码,然后在上面抛出一个Python包装器。...当然,在某些情况下numpy没有您想要功能。 在我们一个例子中,我们将用Python为插入排序算法编写一个函数。该函数将接受一个未排序列表作为输入,并返回排序后列表作为输出。...100000个数字需要排序相当多数字,特别是当我排序算法平均复杂度为O(n²)。在i7–8700K电脑上,对所有这些数字进行排序平均需要3.0104秒! ?...众所周知,Python循环很慢。更糟糕,在我们例子中,for循环中有一个while循环。另外,因为我们排序算法O (n²),当我们添加更多项目列表,我们运行时增加成平方!...当我们看到一个函数包含用纯Python编写循环,这通常是numba能够提供帮助一个好迹象。查看下面的代码,看看它是如何工作。 ? 我们代码只增加了两行。

2.1K43

致开发人员:沉迷面向对象编程不可自拔?函数式编程了解一下

事实真的这样吗? 如果事先没有定义 global_list,那么这个函数就不能工作,它输出相同列表,尽管经过了修改。...这可能就是问题所在,列表确实是函数一个输入,虽然我们没有明确说明。 1.不忠于函数 这些隐含输入,或者其他情况下输出,有一个官方名称:副作用。...2.函数式编程正在编写纯函数 具有明确声明输入输出函数没有副作用函数,而没有副作用函数就是纯函数。 函数编程一个非常简单定义:仅用纯函数编写程序。...因此,如果全局变量不同,则相同输入变量可能导致不同输出。后者会让调试和代码维护变得更加困难。...这里有一个容易发现副作用简单规则:由于每个函数必须具有某种输入输出,因此没有任何输入输出函数声明必须不纯。如果采用函数式编程,这是你可能想要更改一个声明。

64930

Core ML 2有什么新功能

机器学习模型有3个主要部分: 型号数量 重量数量 重量大小 当我们量化模型,我们正在减小重量大小!在iOS 11中,Core ML模型存储在32位模型中。...image 当我们以16位格式表示Inceptionv3模型,它占用空间更少! 但是,重要要记住权重量化真正含义。早些时候,在比喻中,说更多权重会产生更多准确性。...image 我们也收到100%输出,因此两种型号都兼容!鼓励你玩量化不同模型。在上面的例子中,我们将Inceptionv3模型量化为16位模型。...但是,迭代每个输入可能需要很长时间。 为了解决这个问题,Apple推出了全新Batch API!与for循环不同,机器学习中批处理将所有输入馈送到模型并且其结果准确预测!...当您将神经网络从一种格式转换为Core ML,您正在转换每一层。但是,可能有一些罕见情况,Core ML根本不提供转换图层工具。

68720

金九银十,自动化面试题放送一波

接口测试设计测试用思路如下: 1)接口业务逻辑测试(正例) 接口逻辑测试指根据业务逻辑、输入参数、输出描述,对正常输入情况下所得输出值是否正确测试,也就是测试对外提供接口服务是否正常工作...; 当输出参数有联动性,需要校验返回参数实际结果是否都符合需求; 所有功能都要考虑兼容旧版本。...1)selenium client(python等语言编写自动化测试脚本)初始化一个service服务,通过webdriver启动浏览器驱动程序chromedriver.exe; 2)通过RemoteWebDriver...3)如果拷贝对象里元素包含引用(像一个列表里储存着另一个列表,存就是另一个列表引用),那浅拷贝和深拷贝不同,浅拷贝虽然将原有对象复制一份,但是依然保存引用,所以对新对象里引用里值进行修改...而深拷贝则不同,它会将原对象里引用也新创建一个,即新建一个列表,然后放列表引用,这样就可以将新对象和原对象完全分离开。

52740

python如何对类进行测试

------你所做大部分工作都是测试类中方法行为,但存在一些不同之处,下面来编写一个类进行测试。...假设将它放在了survey中,并想进行改进:让每位用户都可输入多个答案;编写一个方法,它只列出不同答案,并指出每个打哪出现了多少次;再编写一个类,用于管理非匿名调查。...例如,允许每位用户输入多个答案,可能不小心出力单个答案方式。要确认在这个模块没有破坏既有行为,可以编写针对这个类测试。...注意: 运行测试用,每完成一个单元测试,Python都打印一个字符:测试通过时打印一个句点;测试引发错误时打印一个E;测试导致断言失败打印一个F。...这就是你运行测试用,在输出第一行中看到句点和字符数量各不相同原因。如果测试用例包含很多单元测试,需要运行很长时间,就可通过观察这些结果来获悉有多少测试通过了。

4.2K30

笨办法学 Python3 第五版(预览)(三)

它简单地将元素附加到列表末尾。打开 Python shell 并尝试用自己创建列表做几个示例。每当遇到这样情况,总是尝试在 Python shell 中进行交互操作。...为了可视化这一点,在循环中到处放置print语句,打印出 Python 在循环中运行位置以及这些点上变量设置。在循环之前、顶部、中间和底部编写print行。研究输出并尝试理解正在进行跳跃。...当我脚本最终工作,我会删除它并使用所知道重新编写它。也许这一次直接写 Python,或者再次重复这个过程。这样做会让确认自己实际上可以做到。这不仅仅是愚蠢运气。...这是一个专业过程吗? 你可能会认为这个过程不实用或不专业。认为,当你刚开始,你需要不同于那些编程时间很长的人所需工具。...当我卡住或者在学习一门新语言,我会使用这个过程。如果不懂一门语言但知道想做什么,那么通常可以写注释然后慢慢将其转换为代码,这也教会那种语言。

14310

Python入门到放弃 | 超简单 跟我学(八)

如果你想在其他程序中复用你写大量函数,怎么办?可能你已经猜到了,答案就是模块。 编写模块方式有很多: 最简单方式就是创建一个包含很多方法和变量并以 .py 为扩展文件。...另一种方法就是用编写 Python 解释器语言来编写模块。例如,你可以用 C 语言 来写模块,在使用标准 Python 解释器中进行编译,这些模块会从你 Python 代码中调用。...字节码文件 .pyc 导入模块一个相对而言开销较大操作,因此,Python 试用了一些手段来使得导入模块操作更加快速。...如果这个对象是个模块,返回列表中会包含模块内部所有的函数、类和变量。 这个函数接收一个可选参数。当参数模块名,函数会返回对应模块标识符列表。没有参数则会返回当前模块标识符列表。...当我们通过 del 语句在当前模块中移除变量后,再次调用 dir 函数,可以发现输出列表也改变了,'a' 被移出了列表。 关于 del 一点注释:这行语句执行后用于 删除 一个变量或标识符。

83610
领券