繁体   English   中英

快速排序:分区分析

[英]Quick sort : analysis of partitioning

我正在罗伯特·塞奇威克(Robert Sedgewick)的算法第四课程中学习快速排序。

我想知道快速排序代码的以下分区是长度为N的数组中的比较数。

private static int partition(Comparable[] a, int lo, int hi)
{
  int i = lo, j = hi+1;
  while (true)
  {
    while (less(a[++i], a[lo]))
      if (i == hi) break;

    while (less(a[lo], a[--j]))
      if (j == lo) break;

    if (i>= j) break;
    exch(a, i, j);
  }

  exch(a, lo, j);
  return j;
}

我想知道上述代码的T(n)。 ( 相比 )

在我看来,比较需要大约2N。

的原因是因为它占据N比较了i到从左向右移动,并且用于j向右移动,以分别在一个已排序阵列左诸如阵列(A,B,C,d,E,F,G, H)。

比较= less()

该分区函数的时间复杂度为T(n) = O(n)

天哪,这是我迭代i错误。

在找到i要停止的过程中,只需要1个比较即可。

因此,需要〜N个比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM