Mergesort - co jest źle?

2017-05-09 19:40
Krzyaf4494
0

Mam za zadanie napisać program w C ilustrujący metodę mergesort.
Wspomagając się Internetem napisałem taki kod:

#include<stdio.h>
#define N 8

int tab[N];
int pomoc[N];

void scal(int poczatek, int srodek, int koniec){
int i,j,x;
for(i=poczatek; i<=koniec; i++)
pomoc[i]=tab[i];

i=poczatek; j=srodek+1; x=poczatek;

while(i<=srodek && j<=koniec){
    if (pomoc[i]<pomoc[j])
    tab[x++]=pomoc[i++];
    else
    tab[x++]=pomoc[j++];
    }
    while(i<=srodek)
    tab[x++]=tab[i++];
}

void merge_sort(int poczatek, int koniec){
    int srodek;
    if(poczatek<koniec){
        srodek=(poczatek+koniec)/2;
        merge_sort(poczatek, srodek);
        merge_sort(srodek+1, koniec);
        scal(poczatek, srodek, koniec);
    }
}

int main(){

int i;

    printf("Podaj elementy do posortowania:\n");

    for(i=0;i<N;i++){
        printf("Podaj %d. element:\n",i+1);
        scanf("%d",&tab[i]);
        }

    printf("\nElementy przed posortowaniem:\n");
    for(i=0;i<N;i++)
    printf("%d\n",tab[i]);

    merge_sort(0, N-1);

    printf("\nElementy po posortowaniu:\n");
    for(i=0;i<N;i++)
    printf("%d\n",tab[i]);

    return 0;
}

Wygląda analogicznie jak ten z Internetu, ale wypisując powtarza niektóre liczby i zastępuje nimi inne.
Proszę o pomoc jak to naprawić.

edytowany 1x, ostatnio: furious programming, 2017-05-09 22:27

Pozostało 580 znaków

2017-05-09 19:57
0

Zacznij od sformatowania tego kodu po ludzku.


edytowany 1x, ostatnio: Patryk27, 2017-05-09 19:57

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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