Mergesort - co jest źle?

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

0

Zacznij od sformatowania tego kodu po ludzku.

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