#include <stdio.h>
#include <malloc.h>
int insertAt(int *Arr, int len, int num) {
for (int i = 0; i < len; ++i) {
if (num <= Arr[0])
return 0;
else if (num >= Arr[len])
return len + 1;
else if (num >= Arr[i - 1] && num <= Arr[i])
return i;
}
}
int * sortedArrayInsertNumber(int *Arr, int len, int num){
int *output = (int *)malloc((len + 1)*sizeof(int));
if (len <= 0)
return NULL;
for (int i = 0, j = 0; j <= len+1; ++i, ++j) {
if (i == insertAt(Arr, len, num) && j==i) {
output[j] = num;
--i;
}
else if(insertAt(Arr,len,num)==len+1) {
output[j] = num;
}
else {
output[j] = Arr[i];
}
}
return output;
}
int main() {
int input[5] = {2,4,6,8,10};
int *out = (int*)malloc(6*sizeof(int));
out = sortedArrayInsertNumber(input, 5, 12);
for(int i=0;i<6;++i) {
printf("%d\n", out[i]);
}
}
Lorsque j'essaie ce cas de test, cela me donne parfois une erreur d'exécution. D'autres fois, il sort:Erreur d'exécution: insertatIndex
2
4
6
8
10
12
Qui n'a aucun sens?
De plus, y a-t-il un moyen d'améliorer mon code?
La question nécessite que j'insère une valeur num
à l'index approprié.
Vous perdez de la mémoire allouée et remplacez sa valeur par celle renvoyée par 'sortedArrayInsertNumber' – LPs
' Arr [len] 'accédera au tableau hors limites' Arr [5] '. Les indices commencent de «0» à «4» dans votre cas. – LPs
@LPs Même lorsque j'utilisais simplement 'int * out; Out = sortedArrayInputNumber out (Arr, 5, 12); ' le même problème persiste (note: il ne me donne parfois l'erreur d'exécution, tandis que d'autres fois il me donne la bonne réponse comme mentionné ci-dessus). Je retourne un tout nouveau tableau "output" dans la fonction sortedArrayInsertNumber qui a longueur len + 1. –