Salut à tous,
je viens vous soumettre mon code mergesort qui ne fonctionne pas,
Je vous présente les fonctions que j'ai écrites :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
void fusion(int tab[], int deb, int mid, int end)
{
	int i= deb;
	int j = mid + 1;
	int size = end-deb+1;
	int *tab2= new int[size];
	int k = deb;
	for (int p=0;p<size;p++)
	{
		tab2[p]=tab[p];
	}
 
	while (i<=mid && j <=end )
	{
		if(tab2[i]>tab2[j])
		{
			tab[k]=tab2[j];
			j++;
		}
		else
		{
			tab[k]=tab2[i];
			i++;
		}
		k++;
	}
	while(i<mid)
	{
		tab[k]=tab2[i];
		i++;
		k++;
	}
 
	while(j<end)
	{
		tab[k]=tab2[j];
		j++;
		k++;
	}
 
}
void merge_sort(int tab[], int deb, int end)
{
	if(deb < end)
	{
	int mid=deb+(end-deb)/2;
	merge_sort (tab,deb,mid);
	merge_sort(tab,mid+1,end);
	fusion(tab,deb,mid,end);
	}
 
}
la fonction merge_sort effectue la division progressive du tableau et la fonction fusion fusionne tout en faisant le tri
Pour l'entrée suivante:

|1005|2342|2608|7529|17926|24824|29165|32350|
j'obtiens la sortie qui suit :
|-357437318|-33686019|-33686019|0|1005|2342|7529|32350|

merci d'avance pour votre aide et remarques