命名排序算法。是QuickSort吗?

时间:2016-03-30 04:54:58

标签: c++ sorting quicksort

对于我写的这种排序算法,我有两个问题:

1.当我填充向量ng-class="{'active': {{ selectedCat | filter:catType }} == cat.id}"(最坏情况)时,我得到的结果优于ng-class="{'active': ( selectedCat | filter:catType ) == cat.id}"。 (我甚至不确定我是否还写了一个快速入口)。

2.当我混淆范围时,例如:我填充未分类的向量[max-num, 0]然后填充O(n^2),奇怪的是它运行时崩溃到数字900,000但是在之后崩溃。

[0, max-num/2]

1 个答案:

答案 0 :(得分:1)

是的,这是天真的快速排序。但是你选择中间元素而不是最后一个元素作为你的支点。

  1. 当你填充向量[max-num,0]时,它实际上不是 最糟糕的情况。因为每次你选择 将中间元素作为轴,将矢量分成两部分 大小几乎相同,因此时间复杂度为O(nlogn)。
  2. 然而,当您填充未排序的向量[0,max-num / 2]然后[max-num / 2,0]时,它是您算法的最坏情况,因为您将向量分成两个零件有一个非常长,一个非常短。所以时间复杂度是O(n ^ 2)。
  3. 要在几乎所有向量上获得更好的性能,您可以:

    • 选择一个随机元素作为您的支点
    • 选择三个随机元素并选择第二个最大元素
    • 当向量的大小足够小,例如小于10时,对其应用插入排序
    • 为了处理所有元素彼此接近的情况,你可以在递归排序子向量之前做一些额外的工作,跳过等于pivot的元素