J'ai un tableau de nombres qui a déjà été trié auparavant, il n'y a donc pas besoin de le trier, j'ai besoin d'insérer une valeur donnée, nommée val
à une position valide dans mon tableau.
Mon programme fonctionne pour une valeur donnée qui est plus petite que la dernière, mais pour 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 devrait être {1, 2, 3, 4, 5, 6}
mais pour la valeur 7
mon tableau ressemble à {1, 2, 7, 4, 6, 0}
.
#include <stdio.h>
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;
}