Insérer un élément dans le tableau C

J’ai un tableau de nombres qui a été sortingé auparavant, il n’y a donc pas besoin de le sortinger, je dois insérer une valeur donnée, nommée val , à une position valide dans mon tableau.

Mon programme fonctionne pour une valeur donnée plus petite que la dernière, mais dans le cas où la valeur est plus grande que la dernière, mon programme ne veut tout simplement pas insérer la valeur.

Par exemple, pour le tableau {1, 2, 3, 4, 6} et la valeur 5 , le tableau doit être {1, 2, 3, 4, 5, 6} , mais pour la valeur 7 mon tableau ressemble à {1, 2, 7, 4, 6, 0} .

 #include  void insert(int val, int *n, int v[]) { int index; index = n - 1; if (n == 0) { v[0] = val; // check if array is empty n = n + 1; // v[0] becomes the given value } // increase size of array if (val > v[index]) { v[index+1] = val; // given value is bigger than the last value in array n = n + 1; // increase size } else { while (index >= 0 && v[index] > val) { v[index+1] = v[index]; //shift items to the right index--; } v[index + 1] = val; //after moving elements to the right n = n + 1; // i set the value to the valid position } } void display(int n, int v[]) { int i; for (i = 0;i < n; i++) printf("%d ", v[i]); } int main(void) { int v[10] = { 12, 23, 34, 41, 69, 71, 81, 91, 100 }; int n; n = 9; // size of array insert(101,n,v); // 101 is given value to insert display(n,v); return 0; } 

Vous avez quelques erreurs:

  1. Vous passez int au lieu de int * , vous ne pouvez donc pas mettre à jour la taille du tableau
  2. Vous ne placez pas correctement la valeur dans le tableau

Voici comment votre code devrait ressembler à ceci:

 #include  void insert(int val, int *nPtr, int v[]); void display(int n, int v[]); int main(void) { int v[10] = {12, 23, 34, 41, 69, 71, 81, 91, 100}; int n; n = 9; insert(101, &n, v); display(n, v); return 0; } void insert(int val, int *nPtr, int v[]) { int n = *nPtr; int i, j; int k = 0; for (i = 0; i < n + 1; i++) if (!k) { if (v[i] > val || i == n) { for (j = n - 1; j >= i; j--) { v[j + 1] = v[j]; } v[i] = val; n++; k = 1; } } *nPtr = n; } void display(int n, int v[]) { int i; for (i = 0; i < n; i++) printf("%d ", v[i]); printf("\n"); } 

Vous pouvez également essayer d'insérer un nombre au début, par exemple 0 et cela fonctionnera toujours.