Как отследить вызовы QuickSort () для массива длины 3 - PullRequest
0 голосов
/ 31 октября 2019

Для алгоритма 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. QuickSort (A, 1,3)

  2. Раздел (A, 1,3)

  3. QuickSort (A, 1,2)

  4. Разделение (A, 1,2)

  5. QuickSort (A, 1,0)
  6. QuickSort (A, 2,3)
  7. Раздел (A, 2,3)
  8. QuickSort (A, 1,2)

Почему он зацикливается с 8 на?

1 Ответ

0 голосов
/ 03 ноября 2019

Если предположить, что индексы начинаются с 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...