Sortowanie przez scalanie

0

Witam panowie. Napisałem algorytm sortowania przez scalanie. Już się męczę od pół godziny ze znalezieniem błędu i nic. Na konsoli wyświetla się 0 0 0 0 0 0 1. Jeśli ktoś by mnie oświecił dlaczego tak się dzieje i znalazł błąd byłbym bardzo wdzięczny.

#include <iostream>

using namespace std;

void merge(int lewy,int srodkowy,int prawy,int tab[])
{
    int i,j,k=0;
    const int MAKS=30;
    int pom[MAKS]={0};
    for(int i=lewy;i<=prawy;i++)
        pom[i]=tab[i];
    i=lewy;
    j=srodkowy+1;
    k=lewy;
    while(i<=srodkowy and j<=prawy)
    {
        if(pom[i]<pom[j])
        {
            tab[k]=pom[i];
            k++;
            i++;
        }
        else
        {
            tab[k]=pom[j];
            k++;
            j++;
        }
        while(i<=srodkowy)
        {
            tab[k]=tab[i];
            k++;
            i++;
        }
    }
}

void mergesort(int lewy,int prawy,int tab[])
{
    int srodkowy=0;
    if(lewy<prawy)
    {
        srodkowy=(lewy+prawy)/2;
        mergesort(lewy,srodkowy,tab);
        mergesort(srodkowy+1,prawy,tab);
        merge(lewy,srodkowy,prawy,tab);
    }
}

int main()
{
    const int rozmiar=7;
    int tab[rozmiar]={5,3,4,7,8,0,1};
    mergesort(0,rozmiar-1,tab);
    for(int i=0;i<rozmiar;i++)
        cout << tab[i] << " ";
    return 0;
} 
0

Proponuję odpalić pod debuggerem.

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