J'écris un algorithme de quicksorting en C et je continue d'obtenir un bus error:10
sur mon terminal. Je comprends que j'ai besoin d'allouer de la mémoire à la matrice bien que je ne sache pas comment dans ce cas précis.C Erreur de bus: 10 en utilisant le tableau de chaînes
Edit: J'ai ajouté les quicksort
, partitioning
et swap
fonctions
void swap(char* a, char* b){
int temp = *a;
*a = *b;
*b = temp;
}
int partitioning(char* A, int start, int finish){
char* pivot = &A[start];
while(1){
while(strcmp(&A[start], pivot) < 0){
start++;
}
while(strcmp(&A[finish], pivot) > 0){
printf("Decrementing finish\n");
finish--;
}
if(start >= finish){
return start;
}
swap(&A[start], &A[finish]);
}
return start;
}
void quicksort(char* A, int start, int finish){
if(start < finish){
int p = partitioning(A, start, finish);
quicksort(A, start, p);
quicksort(A, p+1, finish);
}
}
int main()
{
char *A[] ={"Thomas","Carl","Sabrina","Noam","Alex",
"Victoria","Julia","Audrey","Elon","Liam","Rebecca"};
int n = 11;
for (int i = 0; i < 11; i++)
{
printf("%s ", A[i]);
}
quicksort(*A, 0 , n-1);
printf("\n-------\n after sort\n------\n");
for (int i = 0; i < 11; i++)
{
printf("%s ", A[i]);
}
printf("\n");
return 0;
}
'char * A [] = {... liste des chaînes littérales ..}' est très dangereux sans 'const' pour vous mettre en garde contre des erreurs. Aussi, s'il vous plaît poster 'quicksort()'. –
Où sont les critères de tri réels? Vous ne pouvez pas simplement lancer un algorithme de tri d'un morceau aléatoire de données génériques et attendre de savoir comment le trier. – Lundin
'A' est un tableau de' char * 'avec chaque élément pointant vers une chaîne terminée par un caractère nul. En supposant que vous voulez trier les éléments de 'A' en comparant les chaînes qu'ils pointent, passer' * A' à 'quicksort' n'a aucun sens, car c'est la même chose que' A [0] '. Vous voulez trier 'A', pas' A [0] ', donc vous devriez passer' A' à 'quicksort', et le paramètre formel devrait être de type' char ** '. –