当前位置: 首页 > 知识库问答 >
问题:

桶排序与合并排序相结合的可能性

柳逸春
2023-03-14

事情是这样的。我在做leetcode 164最大间隙。最佳解决方案是桶排序。

这让我对排序问题有了更多的思考。假设我们有如下列表:

2、5、19、444、-14、89、16、77

我认为,我们可以用两个不同的范围来排列这些数字,(min, mid)(mid, max)和mid-应该是min(max-min)/2;

因此我们得到了(-14215)(216444)

我们将min设置为最左侧,max设置为最右侧,并根据范围填充其他元素,然后得到

-14 2、5、19、89、16、77

我们回忆起两个范围的排序,对于左一个范围,我们有(-14,37)(38,89)和列表

-14 2, 5, 19, 16

77 89

递归,然后我们会有排序列表;

我写这篇文章很累,它确实有用。运行时间是O(n log(n)),空间复杂度是O(n),老实说,我还是个学生,并不擅长算法。所以我真的无法让它变得更好。我只是想问一下,这个有没有可能比n logn快得多。我指的是最坏的情况,不是特殊情况。

共有1个答案

易成双
2023-03-14

是的,基于非比较的排序可以打破O(nlogn)的玻璃地板。桶排序是O(N),但它需要提前知道数字在一个区间(i,j)上的均匀分布。基数排序通常用O(N)表示,但它也取决于这些数字的长度。对于您的问题,如果您已经知道分布的间隔,可以尝试桶排序或基数排序。

 类似资料:
  • 双向合并排序与递归合并排序有何不同? 假设在合并排序中有5个数字需要排序8,9,1,6,4,我们按如下步骤1进行划分:{8,9,1}{6,4} 步骤2:{8,9}{1}{6}{4} 步骤3:{8}{9}{1}{6}{4} 现在合并 步骤4:{8,9}{1}{4,6} 步骤5:{1,8,9}{4,6} 第六步:{1,4,6,8,9} 但在双向合并排序中,我们将数组分为两个元素(但根据维基百科,在合并

  • 本文向大家介绍合并排序,包括了合并排序的使用技巧和注意事项,需要的朋友参考一下 合并排序技术基于分而治之。我们将整个数据集分成较小的部分,然后按排序顺序将它们合并成较大的部分。在最坏情况下它也非常有效,因为该算法在最坏情况下的时间复杂度也较低。 合并排序技术的复杂性 时间复杂度: 所有情况下为O(n log n) 空间复杂度:  O(n) 输入输出 算法 合并(数组,左,中,右) 输入- 数据集数

  • 在elasticsearch中,是否有方法使用自定义分数对聚合桶进行排序/排序? 我正在按客户姓名进行扣球。每个客户都有多个订单,其中有一个交货日期字段(DeliveDate)。我想根据与当前日期的距离(接近程度)对桶进行排序。 例如,对交货日期更接近今天日期的客户名进行排序。 非常感谢。

  • 在处理接近排序的数组时,哪种算法的快速排序或合并排序性能更好?为什么?我意识到,在这种情况下,其他算法可能会比这些算法表现得更好。

  • 我已经阅读并理解了Mergesort的工作原理(作为文本),现在我正在尝试对其进行编码。我已经完成了分割数据的部分(我使用向量),直到它的每个大小都为1。现在我已经在Mergesort中为另一个所需部分编写了代码,我不知道该如何调用它,但我只是称它为“比较和排序部分”。 你有两个向量,这个部分应该比较最开始的元素,取较小的元素,然后删除选择的元素,把它放入一个新的向量中。这样做,直到两个向量的大小

  • 我正在研究一个合并排序,它对int[]进行排序。我的mergeSort方法接受数组、startindex和EndIndex。我还输出了main方法中的before和after。after数组的结果与before相同。我看不出我的ALG做错了什么。我一直在查阅其他人对合并的看法,看起来我做得很对。显然不是,因为列表没有排序…我的合并排序算法做错了什么? 更新:所以我对我的代码做了一些修改,看起来分割