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ć.