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