【问题标题】:How to trace QuickSort() calls for length 3 array如何跟踪长度为 3 的数组的 QuickSort() 调用
【发布时间】:2020-02-26 06:57:41
【问题描述】:

对于快速排序的 CLRS 算法,

我无法跟踪输入 A = [2,1,3] 的所有调用。

QuickSort(A,p,r)
  if p < r
   q = Partition(A,p,r)
   QuickSort(A,p,q-1)
   QuickSort(A,q+1,r)
Partition(A,p,r)
  x = A[r]
  i = p - 1
  for j = p to r - 1
      if A[j] <= x
        i = i + 1
        swap (A[i], A[j])
  swap(A[i+1], A[r])
  return i+1

这是我对数组 A 的函数调用:

  1. 快速排序(A,1,3)

  2. 分区(A,1,3)

  3. 快速排序(A,1,2)

  4. 分区(A,1,2)

  5. 快速排序(A,1,0)
  6. 快速排序(A,2,3)
  7. 分区(A,2,3)
  8. 快速排序(A,1,2)

为什么从 8 点开始循环?

【问题讨论】:

    标签: recursion computer-science quicksort callstack


    【解决方案1】:

    假设索引从 1 而不是 0 开始,我得到:

    quicksort A 1 3
    partition A 1 3
    quicksort A 1 2
    partition A 1 2
    quicksort A 1 0
    quicksort A 2 2
    quicksort A 4 3
    

    如果索引从 0 开始,那么初始调用应该是 QuickSort(A, 0, 2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-23
      • 2015-04-07
      • 2018-06-28
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      相关资源
      最近更新 更多