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:
int
au lieu de int *
, vous ne pouvez donc pas mettre à jour la taille du 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.