[c++] Mergesort

0

Witam!
Mam problem z programem, mającym na celu posortowanie ciągu za pomocą algorytmu sortowania przez scalania - mergesort.
Mój kod wygląda tak:

#include <iostream>
#include <algorithm>

using namespace std;
int tab[100] = {8, 4, 3, 5, 9};
int pom[100];
void scalaj(int *tab, int *pom, int p, int q, int r);
void sortuj(int *tab, int *pom, int p, int r);
int main()
{
    sortuj(tab, pom, 0, 4);
    for(int i=0; i<4; i++)
        cout << tab[i] << " ";
    return 0;
}
void scalaj(int *tab, int *pom, int p, int q, int r)
{
    int i = p;
    int j = q+1;
    int k = p;
    while(i <= q && j <= r)
    {
        if(tab[i] < tab[j])
        {
            pom[k] = tab[i];
            i++;
        }
        else
        {
            pom[k] = tab[j];
            j++;
        }
        k++;
    }
    while(i <= q)
    {
        pom[k] = tab[i];
        i++;
        k++;
    }
    while(j <= r)
    {
        pom[k] = tab[j];
        j++;
        k++;
    }
    for(int f=p; f<r; f++)
    {
        tab[f] = pom[f];
    }
}
void sortuj(int *tab, int *pom, int p, int r)
{
    if(p==r)
        return;
    int q = (p+r)/2;
    sortuj(tab, pom, p, q);
    sortuj(tab, pom, q+1, r);
    scalaj(tab, pom, p, q, r);
}
 

Dla przykładowych danych program wypisuje jakieś badziewie, tj. - 3 4 3 5.
Co mnie zadziwia to to, że sama funkcja scalaj działała mi prawidłowo dla danych np. 1,3,6,7,2,4,5,6,8,9 - mam w jednej tablicy te dane, podaję miejsce zakończenia posortowanego jednego ciągu i rozpoczęcia drugiego i program ładnie działał. Po dodaniu krótkiej procedury sortuj działającej dzięki rekurencji wszystko się sypie ;/

Program pisałem na podstawie kursu algorytmiki na mainie, program jest tam bardzo podobny jak mój.

Proszę o wskazanie mi błędu.
Z góry dzięki
anonim ;p

0

W sumie to rzeczywiście przekazywałem to niepotrzebnie, pousuwałem to przekazywanie, ale wynik ten sam ;/

0
    for(int f=p; f  __<=__  r; f++)
    {
        tab[f] = pom[f];
    } 
0

Zmieniłem co trzeba - nadal jest problem, program zjada ostatnią cyfrę, a na początku dodaje 0 - to jest dla danych 8, 4, 3, 5, 9 wypisuje 0,3,4,5,8.

Gdzie leży problem?

0

zapomniałem dodać, że przy wypisywaniu też <=, po tych dwóch zmianach u mnie działa prawidłowo

0

dzięki, działa ;)

0

proszę:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1