Witam forumowiczów. Mam do przerobienia algorytm sortowania przez scalanie z książki "Wprowadzenie do algorytmów" Cormena, a dokładniej algorytm samego scalania. Zadanie polega na tym, aby zamiast dwóch tablic pomocniczych użyć jednej.
SCAL(A, p, q, r)
n=q-p+1
m=r-q
for i=1 to n
do B[i]=A[p+i-1]
B[n+1]=nieskonczonosc
for j=1 to m
do B[q+1+j]=A[q+j]
B[r+2]=nieskonczonosc
Problem zachodzi w drugiej pętli. Dla podciągu o indeksach np. 2-12 następuje sytuacja, w której wartownik (nieskończoność) stoi na 7. miejscu, a rozpoczęcie przypisywania od B[q+1+j] pomija jedną komórkę tablicy. q = 7, j = 1 - q + 1 + j = 9. Dla innych podciągów ta pętla działa prawidłowo. Nie mam kompletnie pomysłu na ten problem, a nie chcę używać ifów dla różnych przypadków. Jak więc znaleźć uniwersalne rozwiązanie?
PS: Tablice muszą zaczynać się od indeksu 1, gdyż tak jest w oryginalnym algorytmie w książce.
Pozdrawiam.