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

我正在使用快速排序对数组进行排序。但是我得到的是未排序的数组。我试图找出错误,但失败了

快速排序是一种常用的排序算法,它的基本思想是通过分治法将一个大问题分解为多个小问题来解决。具体步骤如下:

  1. 选择一个基准元素(pivot),通常选择数组的第一个元素。
  2. 将数组分成两部分,小于等于基准元素的放在左边,大于基准元素的放在右边。
  3. 对左右两部分分别进行递归调用快速排序算法。
  4. 合并左右两部分的结果,得到最终的排序结果。

根据你的描述,你得到的是未排序的数组,可能是在实现快速排序算法的过程中出现了错误。以下是一些可能导致错误的原因和解决方法:

  1. 检查基准元素的选择:确保选择的基准元素在数组中的位置是正确的,通常是数组的第一个元素。
  2. 检查分割数组的过程:确保将小于等于基准元素的元素放在左边,大于基准元素的元素放在右边。可以使用两个指针,一个从左边开始,一个从右边开始,交换它们直到它们相遇。
  3. 检查递归调用的过程:确保在递归调用快速排序算法时,传入的数组范围是正确的。通常是左边部分的起始位置和结束位置,以及右边部分的起始位置和结束位置。
  4. 检查合并结果的过程:确保在合并左右两部分的结果时,将左边部分的结果和基准元素以及右边部分的结果按照正确的顺序合并起来。

如果以上步骤都没有问题,但仍然得到未排序的数组,可能是在实现过程中出现了其他错误。可以逐步调试代码,打印中间结果,以便找出错误所在。

关于快速排序的优势和应用场景,快速排序是一种高效的排序算法,具有平均时间复杂度为O(nlogn)的特点。它在大多数情况下都比其他排序算法更快。快速排序广泛应用于各种排序场景,包括但不限于以下几个方面:

  1. 排序大规模数据:快速排序适用于需要对大规模数据进行排序的场景,因为它的时间复杂度较低。
  2. 排序随机数据:快速排序对于随机数据的排序效果较好,因为它能够快速将数据分割成两部分。
  3. 排序不稳定数据:快速排序是一种不稳定的排序算法,即相等元素的相对顺序可能会改变。在某些场景下,这种特性是需要的。

腾讯云提供了多种云计算相关的产品,包括云服务器、云数据库、云存储等。具体针对快速排序算法的应用场景,腾讯云没有特定的产品推荐。但你可以考虑使用腾讯云的云服务器来进行开发和测试,使用云数据库来存储和管理数据,使用云存储来存储和传输文件等。

希望以上回答对你有帮助。如果还有其他问题,请随时提问。

相关搜索:我试图在python中使用选择排序算法对这个数组进行排序,但它没有给出所需的输出。我做错了什么?如果我的输入数组被定义为const,我如何对它进行排序?我正在尝试使用类似于选择排序的方法对数组进行排序,但我的代码无法正常工作我在使用Collections.sort方法对我的数组列表进行排序时遇到了问题--我一直收到错误消息我想创建一个标签数组,并使用插入排序根据标签中的值对它们进行排序我尝试对一个数组进行排序,然后将其映射到一个新的数组,但排序不起作用(映射起作用)我使用的是laravel groupBy,但我正在尝试根据有许多分组项的位置对结果进行排序我是redux和react的新手,我正在尝试更新REDUX存储中的嵌套状态,但无法对其进行排序我使用insertSorted方法对随机整数进行排序,但是现在我的代码没有像它应该的那样迭代25次,我哪里做错了?我需要帮助对字符串数组中的特定数字进行排序才能降序我正在尝试使用react-native进行简单的路由,但是我得到了一些错误,比如构建Javascript包失败我编写了一个按字母顺序对字符串进行排序的函数,但得到了一个分段错误我正在尝试对firestore执行一个简单的查询,包括文本搜索。为了进行分页,我使用字段来按日期排序按数组中文件名的前13个字符对我从光盘读取的XML文件进行排序我想使用splice方法从对象数组中删除动态追加的卡片,但循环迭代得到的值是错误的如何按日期按降序对项目数组进行排序(我使用了loadash sortBy,但它首先返回最旧的,而我需要先返回最新的)?我的Java扫描器不会停止运行。我正在尝试创建一个按字母顺序对字符串进行排序的方法,但是扫描仪不会停止扫描为什么我的合并排序实现对list给出了正确的结果,但在对numpy数组使用时却给出了不同的(错误的)结果?这个程序接受用户输入,应该使用bubbleSort对其进行排序,但它输出的是字母和数字,我不知道为什么如果我在使用Arrays.sort()之后尝试打印ch[0]或排序字符数组中的任何随机字符,它给出一个空输出,因此输出是空的,为什么?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【十大编程算法】算法一:快速排序算法

所以现在也在学习英语+算法方面的知识,这些东西可能在短时间看不到显著的成效,不过越往后面,对你的帮助会越来越大。除非,你一直都想当个菜鸟。 快速排序是由东尼·霍尔所发展的一种排序算法。...快速排序是对冒泡排序的改进,它使用分治法的思想,每次循环根据指定的基准数,将其他元素分别放置其左右(升序排序,大的放右小的放左),第二次循环,以基准数为中心,分为左右两部分,每部分再通过新的基准数排序…...第一次循环结束 2、第二次循环 先在基准数左边的数和左边的数是未排序好的,以基准数为线,可以将nums数组划分为两个数组 int[] nums = {26, 13, 51, 23, 57}; int[]...看到这里,是不是数组很眼熟呢,没错,基准数26左边的数都小于它,基准数26右边的数都大于它,但是左边的数还没有排序好,再次重复之前的操作,以基准数为界线,再次将数组划分为两个数组 int[] nums...递归调用来实现快速排序算法 ? ? 排序结果 ? 思考一个问题,为什么要先从右边开始查找呢? 参考这篇文章:快速排序法为什么一定要从右边开始的原因 有写得不好的地方,可以后台告诉我。

37120

【十大编程算法】算法一:快速排序算法

所以现在也在学习英语+算法方面的知识,这些东西可能在短时间看不到显著的成效,不过越往后面,对你的帮助会越来越大。除非,你一直都想当个菜鸟。 快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。...快速排序是对冒泡排序的改进,它使用分治法的思想,每次循环根据指定的基准数,将其他元素分别放置其左右(升序排序,大的放右小的放左),第二次循环,以基准数为中心,分为左右两部分,每部分再通过新的基准数排序…...第一次循环结束 2、第二次循环 先在基准数左边的数和左边的数是未排序好的,以基准数为线,可以将nums数组划分为两个数组 int[] nums = {26, 13, 51, 23, 57};int[]...看到这里,是不是数组很眼熟呢,没错,基准数26左边的数都小于它,基准数26右边的数都大于它,但是左边的数还没有排序好,再次重复之前的操作,以基准数为界线,再次将数组划分为两个数组 int[] nums...参考这篇文章:快速排序法为什么一定要从右边开始的原因 有写得不好的地方,可以后台告诉我。 如果觉得文章不错,随手点赞转发,每周都会为你带来算法知识。、

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

    哈喽,各位小伙伴们,你们好呀,我是喵手。  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。   ...小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!前言  在日常开发中,数组排序是一个非常常见的操作。...在实际应用中,需要进行相应的异常处理。快速排序  快速排序是一种高效的排序算法。它通过选定一个基准值,将数组分为两个子数组,然后递归地对子数组进行排序。该算法的时间复杂度为O(nlogn)。...它使用递归的方式将数组一分为二,然后对两个子数组分别调用自身进行排序,最后将两个已排序的子数组合并成一个有序的数组。如果low小于high,则进行排序,否则直接返回。...总结  本文对数组排序的重要性进行了探讨,并介绍了Java中常用的排序算法,包括冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序。

    24431

    【愚公系列】2023年11月 十一大排序算法(八)-计数排序

    一、计数排序1.基本思想计数排序是一种非比较排序算法,它的基本思想是:对于一组待排序的元素,如果知道了每个元素的大小关系,那么就可以利用这个信息对它们进行排序。...具体实现时,先统计出待排序元素中每个元素出现的次数,然后根据元素的大小关系,依次把元素放回原来的位置中,最终得到一个有序的序列。计数排序的基本步骤如下:找出待排序数组中的最大值max和最小值min。...计数排序的时间复杂度为O(n+k),其中n是待排序数组的长度,k是计数数组的大小。当k较小时,计数排序的效率很高,但当k较大时,计数排序的辅助空间会非常大。...空间复杂度也为O(n+k),因为需要借助辅助数组来存储排序结果。计数排序的核心思想是对每个数进行计数并统计其出现的次数,然后按顺序输出即可。...因此,如果你需要对一组整数进行非常快速地排序,计数排序是一个不错的选择。

    17311

    数组排序算法大比拼:快排、归并、冒泡哪个更快?

    哈喽,各位小伙伴们,你们好呀,我是喵手。  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  ...在快速排序中,通过选择一个基准元素(通常是第一个元素),将整个数组分为两部分:小于基准的在左边,大于基准的在右边。接着,通过递归对左右两部分分别进行排序,最终得到一个有序数组。  ...每进行一轮排序,就会将未排序部分中最大的元素“浮”到数组的最后面,因此排序后的数组是从小到大排列的。  ...排序对比结论  根据如上三种排序方式对比,总的来说,快速排序和归并排序的时间复杂度相似,但快速排序的空间复杂度更佳。因此,在大规模数据排序的情况下,快速排序是最优的选择。...⭐️若喜欢我,就请关注我叭。⭐️若对您有用,就请点赞叭。⭐️若有疑问,就请评论留言告诉我叭。我正在参与我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

    72621

    十大经典排序算法 -- 动图讲解

    它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。...本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。 快速排序的名字起的是简单粗暴,因为一听到这个名字你就知道它存在的意义,就是快,而且效率高!它是处理大数据最快的排序算法之一了。...例如:计数排序是用来排序0到100之间的数字的最好的算法,但是它不适合按字母顺序排序人名。但是,计数排序可以用在基数排序中的算法来排序数据范围很大的数组。...找出待排序的数组中最大和最小的元素 2. 统计数组中每个值为i的元素出现的次数,存入数组C的第i项 3. 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加) 4....算法分析 桶排序最好情况下使用线性时间O(n),桶排序的时间复杂度,取决与对各个桶之间数据进行排序的时间复杂度,因为其它部分的时间复杂度都为O(n)。

    1.4K50

    六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序

    1.插入排序插入排序的思路是将数组分成已排序区间和未排序区间。初始已排序区间只有一个元素,然后一次插入未排序区间的元素到已排序区间中,直到全部元素插入已排序区间。...Shell排序适用于大规模数据的排序。3.选择排序选择排序的思路是找出数组中的最小值,将其与数组的第一个元素交换位置。然后在剩余元素中找出最小值,将其与数组的第二个元素交换位置。...选择排序的优点在于数据移动是最少的,但是如果数据量较大,排序速度较慢。4.冒泡排序冒泡排序的思路是比较相邻的元素,如果顺序错误就把元素交换过来。...2)分割:所有比基准值小的元素挪到基准前面,所有比基准值大的元素挪到基准后面。3)递归地对基准值前后的两个子数组进行快速排序,直到数组已经完全排序。...快速排序思想简单但实现比较巧妙,是常用的高效排 序算法。快速排序采用分治法策略,以第一个元素为主元,将数组分成两半,左半部的值都比主元小,右半部的值都比主元大。然后递归地排序两个子数组。

    27720

    漫画:美团面试题(TOPK:求第K个最大的元素)

    第215题:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。...: TopK 问题 (尤其是大数据处理) 优先队列 利用堆求中位数 这种题目,从个人来讲,我一般是比较偏好使用堆来做的。...作为学术文章,虽然风格可以风趣,但严谨,我是认真的。本文所有代码均在leetcode进行过测试运行。 03 PART 快排 快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C....它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列...上面的代码,大家可以参考参考,看不懂也没关系,我后面是会单独安排一个快排的系列篇来进行讲解的,到时候一堆图解砸进来,保准你看的醍醐灌顶!

    2.6K20

    算法与数据结构在我眼中的样子(1)排序算法

    第 1 轮:把下标间隔为 5 的元素分成一组,一共 5 组,分别执行插入排序 此时数组比未排序的时候更有序了一点。...到「归并排序」和「快速排序」的时候就慢来下来了,但是学着学着就发现,还真的有点儿意思,有了「递归」,排序就快了起来。 5. 归并排序 归并排序的基本思想是「分治算法」。...快速排序 「归并排序」总是一分为二,真正在合并两个有序数组的时候完成排序操作。...「力扣」第 493 题:翻转对 定义了更强的逆序关系,但实际上依然应用的是求解逆序对的思想:分而治之。 「快速排序」的例题: 这两个问题特别重要,需要深刻理解 partition 和「循环不变量」。...「力扣」第 215 题:数组的第 K 大元素 经典的 TopK 问题,需要深刻理解「快速排序」的 partition 过程。 今天就和大家聊这么多,不知道这种形式的分享是不是能够对大家有一点用。

    32530

    算法面试点汇总

    算法面试点汇总 我们会在这里介绍我所涉及到的算法相关的面试点内容,本篇内容持续更新 我们会介绍下述算法的相关面试点: 二分查找 冒泡排序 选择排序 插入排序 快速排序 二分查找 我们在这里介绍二分查找的面试点...首先我们需要知道两者的时间复杂度是相同的: 两者时间复杂度均为O(n^2) 其次我们需要判断选择排序和冒泡排序的速度比: 当正常情况下,选择排序是优于冒泡排序的,因为交换次数较少 但如果数组的整齐度高...,那么冒泡排序是优于选择排序的 最后我们需要介绍一个稳定性概念: 稳定性:当数组中出现相同元素时,稳定性算法在排序过程中不会改变相同元素的位置;但非稳定性算法会改变相同元素的位置 选择排序是非稳定性算法...最后就是稳定性对比: 插入排序是稳定性的;选择排序不是稳定性的 快速排序 我们在这里介绍快速排序的面试点 快速排序基础算法 我们首先依照快速排序的两种思路写出两种快速排序方法: /*单边快速排序*/...=的条件,否则可能出现无限循环或者排序错误 快速排序优化算法 我现在给出的整个快排算法是Acming中闫老师给出的算法,我们的面试尽量书写这个算法: /*快排优化算法*/ import java.util.Scanner

    51220

    排序算法的 Python 实现以及时间复杂度分析

    我用 Python 实现了冒泡排序、选择排序、插入排序、归并排序、快速排序。...然后简单讲了讲快速排序的优化,我们可以通过小数组采用插入排序来减少递归的开销;对于有一定顺序的数组,我采用三数取中来提高性能;对于包含大量重复数的数组,我用了三路快速排序来提高性能。...最后,我把这些排序算法应用在随机数组、升序数组、降序数组、包含大量重复数的数组上,比较了一下它们的耗时。...归并排序体现的是一种分治思想(Divide and conquer),下面是其排序的步骤: 将数组一分为二(Divide array into two halves) 对每部分进行递归式地排序(Recursively...下面是一个示例: ? 来源:快速排序 python 实现 简单实现 下面的代码短小利于理解,但是空间复杂度大,使用了三个列表解析式,而且每次选取进行比较时需要遍历整个序列。

    1.6K20

    算法(三)初等排序后篇

    选择排序的规则 就是重复执行以下的处理: 1.找出未排序部分最小值的位置min。 2.将min位置的元素与未排序部分的起始元素做对比,如果顺序错误则将它们进行就交换。...以数组a={5,4,8,7,9,3,1}为例,我们对其进行从小到大排序,排序过程如下图所示。 ?...我们分别对这四个子数组进行局部排序,接下来对h进行递减操作,直到h为1,这样最后一次循环就是一个典型的插入排序。...这样希尔排序的实现就转换为了一个类似于插入排序但使用的增量不同的过程。 代码实现如下所示。 ?...注释1处的代码是为了得到h值,关于h选什么样的值是最好的,至今还未有定论,这里我们给出比较常用的h值为h = 3 * h + 1,也就是1、4、13、40、121、346、1093......

    60780

    算法基础:五大排序算法Python实战教程

    冒泡排序步骤遍历列表并比较相邻的元素对。如果元素顺序错误,则交换它们。重复遍历列表未排序部分的元素,直到完成列表排序。因为冒泡排序重复地通过列表的未排序部分,所以它具有最坏的情况复杂度O(n^2)。...选择排序 选择排序也很简单,但常常优于冒泡排序。如果您在这两者之间进行选择,最好默认选择排序。...归并排序 归并排序是分而治之算法的完美例子。它简单地使用了这种算法的两个主要步骤: (1)连续划分未排序列表,直到有N个子列表,其中每个子列表有1个“未排序”元素,N是原始数组中的元素数。...(3)递归地将上述两个步骤分别应用于比上一个基准元素值更小和更大的元素的每个子数组。 ? ? 喜欢吗? 在Twitter上关注我,在那里我发布了最新最伟大的人工智能、技术和科学!...Python实战教程 手把手:用PyTorch实现图像分类器(第一部分) 手把手:用PyTorch实现图像分类器(第二部分) 等你来译: 对混乱的数据进行聚类 初学者怎样使用Keras进行迁移学习 强化学习

    1.5K30

    Lucene系列(14)工具类之快速选择算法

    快速选择及其变种是实际应用中最常使用的高效选择算法。 快速选择的总体思路与快速排序一致,选择一个元素作为基准来对元素进行分区,将小于和大于基准的元素分在基准左边和右边的两个区域。...对于快速排序,想必大家对其原理都很清楚,这里不赘述了。 众所周知,快速排序最坏的时间复杂度是 O(n2). 快速选择也是。 最坏情况通常出现在每次选择分割点时,都选择了最错误的那个。...随机选择分割点 由于我们的数组是未排序的,整个数组其实就是随机。因此这种方案与上面的方案本质上没什么区别,还是看运气。...检查参数 定义递归的最大深度 调用快速选择 什么是递归的最大深度 在原理部分讲到,实际应用时,使用三者中位数来进行快速选择,但是如果递归太多次,会认为遇到了极端情况,会切换到中位数的中位数 来进行分割点的选择...想一下: 快速选择的目的,是对一个未排序的数组,求第 k 大的元素。 求中位数,是求数学上的中位数. 也是求未排序的数组中,求第length/2大的元素。

    69710

    【愚公系列】2023年11月 十一大排序算法(二)-快速排序

    希尔排序(Shell Sort):希尔排序是插入排序的一种改进,它将原序列分割成若干个子序列,对每个子序列进行插入排序,最后对整个序列进行插入排序。时间复杂度为O(nlogn)。...基数排序(Radix Sort):按照低位到高位的顺序对元素进行排序,依次排序后得到有序序列。时间复杂度为O(dn),其中d为元素的位数。...将待排序数组分成两个子数组:左子数组的所有元素都小于基准元素,右子数组的所有元素都大于等于基准元素。对左右子数组递归地进行快速排序。合并左子数组、基准元素和右子数组,得到排序后的数组。...快速排序的实现可以使用多种方式选择基准元素和划分子数组,例如随机选择基准元素、三数取中法等。2.复杂度分析快速排序的平均时间复杂度为O(nlogn),最坏情况下的时间复杂度为O(n^2)。...快速排序是一种高效的排序算法,可以用于各种数据结构中。快速排序广泛应用于各个领域,可以快速地对大量数据进行排序,并提高应用程序的性能和响应速度。

    17811

    极客算法训练笔记(五),十大经典排序之冒泡,选择,插入排序

    排序算法衡量指标 关于排序算法的重要性我就不啰嗦了,不重要你也遇不到这篇文章。...直接思路:我们先按照金额对订单数据进行排序,然后,再遍历排序之后的订单数据,对于每个金额相同的小区间再按照下单时间排序。这种排序思路理解起来不难,但是实现起来会很复杂。...(最后一对是第(N-2)和(N-1)项,因为我们的数组从零开始) 第一次循环比较结束,最大的元素将在最后的位置。...时间复杂度分析 最好情况下,要排序的数据已经是有序的了,我们只需要进行一次冒泡操作,就可以结束了,所以最好情况时间复杂度是O(n)。...下一篇写希尔,归并,快排和堆排序,还是按照这种格式,有收获的三连走起,欢迎关注我,我是小魔女阿甘,扫码有惊喜哦。

    54620

    Java数组篇:数组的排序和查找

    数组排序使用Arrays.sort()Java的Arrays类提供了一个静态方法sort(),可以对数组进行排序。...Arrays.sort(userInputs);:使用Arrays类的sort方法对userInputs数组进行排序。...请注意,Arrays.binarySearch方法假设数组是预先排序的。如果数组未排序,使用binarySearch可能会得到错误的结果。...Arrays.binarySearch():在已排序的数组中进行二分查找。测试用例以下是使用main函数的一个测试用例,演示了数组的排序和查找。...小结本文介绍了Java中数组排序和查找的基本方法。使用Java标准库中的Arrays类可以方便地进行这些操作,同时也可以根据需要实现自定义的算法。总结数组的排序和查找是数据处理中的基础操作。

    14821

    这或许是东半球分析十大排序算法最好的一篇文章

    插入排序动画演示 图解插入排序 数组初始化:[ 8,2,5,9,7 ],我们把数组中的数据分成两个区域,已排序区域和未排序区域,初始化的时候所有的数据都处在未排序区域中,已排序区域是空。 ?...快速排序2 然后我们以同样的方式排左边的数据: ? 快速排序3 继续排 0 和 1 : ? 快速排序4 由于只剩下一个数,所以就不用排了,现在的数组序列是下图这个样子: ?...另外,快速排序的空间复杂度为 O(1)。 No.7 堆排序 堆排序顾名思义,是利用堆这种数据结构来进行排序的算法。...对于第二个 bug ,确实解决不了,如果是[ 9998,9999 ]这种虽然值大但是相差范围不大的数据我们也可以使用偏移量解决,比如这两个数据,我减掉 9997 后只需要申请一个 int[3] 的数组就可以进行计数...排的快的有归并、快排时间复杂度是 O(nlogn),计数排序和桶排序虽然更快一些,但是手机号码位数是11位,那得需要多少桶?内存条表示不服。 这个时候,我们使用基数排序是最好的选择。 ?

    41020

    这或许是东半球分析十大排序算法最好的一篇文章

    插入排序动画演示 ▌图解插入排序 数组初始化:[ 8,2,5,9,7 ],我们把数组中的数据分成两个区域,已排序区域和未排序区域,初始化的时候所有的数据都处在未排序区域中,已排序区域是空。 ?...快速排序2 然后我们以同样的方式排左边的数据: ? 快速排序3 继续排 0 和 1 : ? 快速排序4 由于只剩下一个数,所以就不用排了,现在的数组序列是下图这个样子: ?...另外,快速排序的空间复杂度为 O(1)。 No.7 堆排序 堆排序顾名思义,是利用堆这种数据结构来进行排序的算法。...对于第二个 bug ,确实解决不了,如果是[ 9998,9999 ]这种虽然值大但是相差范围不大的数据我们也可以使用偏移量解决,比如这两个数据,我减掉 9997 后只需要申请一个 int[3] 的数组就可以进行计数...排的快的有归并、快排时间复杂度是 O(nlogn),计数排序和桶排序虽然更快一些,但是手机号码位数是11位,那得需要多少桶?内存条表示不服。 这个时候,我们使用基数排序是最好的选择。 ?

    44310

    这或许是东半球分析十大排序算法最好的一篇文章

    插入排序动画演示 图解插入排序 数组初始化:[ 8,2,5,9,7 ],我们把数组中的数据分成两个区域,已排序区域和未排序区域,初始化的时候所有的数据都处在未排序区域中,已排序区域是空。 ?...快速排序2 然后我们以同样的方式排左边的数据: ? 快速排序3 继续排 0 和 1 : ? 快速排序4 由于只剩下一个数,所以就不用排了,现在的数组序列是下图这个样子: ?...另外,快速排序的空间复杂度为 O(1)。 No.7 堆排序 堆排序顾名思义,是利用堆这种数据结构来进行排序的算法。...对于第二个 bug ,确实解决不了,如果是[ 9998,9999 ]这种虽然值大但是相差范围不大的数据我们也可以使用偏移量解决,比如这两个数据,我减掉 9997 后只需要申请一个 int[3] 的数组就可以进行计数...排的快的有归并、快排时间复杂度是 O(nlogn),计数排序和桶排序虽然更快一些,但是手机号码位数是11位,那得需要多少桶?内存条表示不服。 这个时候,我们使用基数排序是最好的选择。 ?

    57150
    领券