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

具有3个分区的快速排序

訾安邦
2023-03-14

假设我们将Quicksort修改为有三个分区,而不是两个分区。左侧分区的值 pivot。然后我们对左分区和右分区进行递归。这个3路分区需要多少时间?

我在一个面试问题中看到了这一点,那里的答案是O(n)。但对于普通的1次快速排序,它是O(nlogn)。

请帮我弄明白为什么不是?

共有1个答案

胡野
2023-03-14

只有O(n),当所有的值都相同时。partition的第一个实例将找到所有值==pivot(无论为pivot选择了哪个值),并且由于没有值<或>pivot,所以不会发生递归

对于正常数据,时间复杂度保持平均情况为O(nlog(n))或最坏情况为O(n^2)。

 类似资料:
  • 我正在学习快速排序在第四算法课程,罗伯特塞奇威克。 我想知道quicksort代码的以下分区是长度为n的数组中比较的个数。

  • 但我想知道如何选择我希望的支点,例如在这个整数列表中,8、7、1、9、11、5、6,我希望选择键6作为我代码中的支点。或者我想选9或者其他什么。我怎样才能把它写进我的代码?非常感谢任何帮助。

  • 我正在读关于快速排序的书,看不同的实现,我正试着去想一些事情。 在这个实现中(当然可以),枢轴被选为中间元素,然后左右指针相应地向右和向左移动,将元素交换到围绕枢轴的分区中。 我正在尝试数组[4,3,2,6,8,1,0]。 在第一个分区上,pivot为6,并且所有左侧元素都已小于6,因此左指针将停止在pivot处。在右侧,我们将0与6交换,然后1与8交换,因此在第一次迭代结束时,数组将如下所示:

  • 我有一个对象数组: 联系类: 我想按然后按对该数组进行排序,以防某些联系人获得相同的。 我可以按其中一个标准排序,但不能两个都选。 如何添加更多条件来对此数组进行排序?

  • 本文向大家介绍Ruby实现的3种快速排序算法,包括了Ruby实现的3种快速排序算法的使用技巧和注意事项,需要的朋友参考一下 刚学Ruby,正巧算法老师鼓励用不熟悉的语言来写算法,我就用Ruby吧~~ 话说Ruby可真是超厉害,好多凭直觉的方法都可以用。。。。。无限膜拜中。。。。 期间我遇到了invalid multibyte char (US-ASCII)的错误,解决办法是在开头加一个#encod

  • 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两