Bonjour, Stack Overflow. Vous m'avez aidé lors d'une mission précédente, et j'espère avoir un peu d'aide sur celui-ci.Broken Merge Trier
Il s'agit d'une affectation de programmation relative aux tris, dont une partie consiste à écrire une implémentation de travail de tri par fusion.
J'ai adapté ma solution à partir du pseudo-code utilisé par le professeur en classe, mais j'obtiens une erreur de segmentation gênante à l'endroit indiqué.
Cette méthode consiste à trier un tableau de structures, avec data_t défini en tant que pointeurs de structure.
La définition struct:
typedef struct {
int id;
int salary;
} employee_t;
typedef employee_t* data_t;
Ils sont classés par le salaire, ce qui est un nombre aléatoire de 40 000 à 90 000.
est ici la méthode réelle
void merge_sort(data_t items[], size_t n)
{
if (n < 2)
return;
size_t mid = (n/2);
data_t *left = malloc(sizeof(data_t) * mid);
data_t *right = malloc(sizeof(data_t) * (n - mid));
for (int y = 0; y < mid; y++)
{
left[y] = items[y];
}
for (int z = mid; z < n; z++)
{
right[z] = items[z];
}
merge_sort(left, mid);
merge_sort(right, (n - mid));
size_t l, r, i;
l = 0;
r = 0;
for (i = 0; i < (n - 1); i++)
{
if ((l < mid) && ((r >= (n - mid)) || ((left[l]->salary) <= (right[r]->salary))))
{
items[i] = left[l++];
}
else
{
items[i] = right[r++];
}
}
free(left);
free(right);
}
Note que je ne l'ai pas fait jusqu'à la fin, de sorte que les Libère du tableau pourrait être mal situé. La segfault se produit toujours lorsque j'essaie d'accéder à droite [r] -> salary, donc je suppose que c'est lié à un pointeur nul, ou similaire. Cependant, je suis extrêmement novice dans le domaine du tri, et je ne sais pas exactement où implanter correctement un chèque.
Tout conseil est grandement apprécié.
Utilisez un débogueur. – usr1234567
Comptez vos parenthèses. – Beta