J'ai écrit ce code en langage C sur Xcode en suivant l'algorithme de mergesort. Le problème est que parfois j'obtiens EXC_BAD_ACCESS et je ne peux pas gérer où l'erreur est! L'algorithme de fusion devrait fonctionner (je l'ai essayé en dehors de la fonction mergesort et fonctionne!). Merci pour votre aide et votre patience!mergesort C mise en œuvre
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIM 6
void mymerge (int v[], int i1,int i2, int last); //mergesort core: merge two ordinated arrays in one bigger ordinated array
void mymergesort (int v[], int lower, int upper);//mergesort
void printv (int v[],int lower, int upper);
int main() {
int i;
srand((unsigned int)time(NULL));
int v[DIM];
for (i=0; i<DIM; i++)
v[i]=rand()%15;
printv(v, 0, DIM-1);
getc(stdin);
mymergesort(v, 0, DIM-1);
printv(v, 0, DIM-1);
}
void printv (int v[],int lower, int upper){
int i;
for (i=lower; i<=upper; i++)
printf("%d\t",v[i]);
}
void mymergesort (int v[], int lower, int upper){
int mid=(upper+lower)/2;
if (upper<lower) {
mymergesort(v, lower, mid);
mymergesort(v, mid+1, upper);
mymerge(v,lower,mid+1,upper);
}
}
void mymerge (int v[], int i1,int i2, int last){
int i=i1,j=i2,k=i1,*vout;
vout=(int*)malloc((last-i1+1)*sizeof(int));
while (i<i2 && j<=last) {
if (v[i]<=v[j]) {
vout[k++]=v[i++];
}else {
vout[k++]=v[j++];
}
}
for (;i<i2;i++) vout[k++]=v[i];
for (;j<=last;j++) vout[k++]=v[j];
for (k=i1; k<=last; k++) v[k]=vout[k];
free(vout);
}
EDIT: merci beaucoup! mais je pense qu'il y a un autre problème, quand j'essaye de trier un plus grand tableau (200 éléments), le programme ne fonctionne pas (j'obtiens une erreur malloc: la somme de contrôle incorrecte pour l'objet libéré a probablement été modifiée). Mais si je l'exécute à partir du débogueur xCode tout fonctionne bien
pouvez-vous formater le code correctement? – vpit3833
Je ne pense pas que le formatage soit correct. Réessayer? Cette fois-ci, utilisez l'étiquette de code. Aussi, vous voudrez peut-être marquer comme devoirs. Les gens vont aider plus alors. – Jeff
désolé je n'ai pas réussi comment formater le code! Je ne marque pas qu'il a des devoirs parce que ce n'est pas: D c'est juste pour le temps libre ...: D – tmnd91