insérer dans le tableau trié
Je veux insérer un élément dans le bon endroit que l'ordre maintient dans la liste triée.
J'ai attribué 2*n la taille de la matrice et rempli le reste avec 999, car ils ne sont pas utilisés actuellement.
ordered_insert(int number,int array[],int size){
int i=0;
int temp1,temp2,index;
while(eleman>array[i]){
i++;}
//push the rest to right by one
index=i;
if(i<size){
temp1=array[i];
temp2= array[i+1];
array[i+1]=temp1;
array[i+2]=temp2;
i++;
}
array[index]=number;
}
Je ne pouvais pas comprendre comment le remplacer 999s ou est-il une meilleure façon de faire à la place?
- L'utilisation de la boucle de maj reste du tableau (ou memmove si ce n'est pas une école d'affectation).
- Il y a une question similaire, here mais je ne trouve pas les réponses très satisfaisantes. Google recherche binaire position d'insertion pour trouver de meilleurs résultats, y compris rosettacode.org/wiki/Binary_search
- En fonction de votre utilisation (par exemple, nombre d'insertions), ce type d'opération serait mieux adapté d'une liste liée au lieu d'un tableau.
Vous devez vous connecter pour publier un commentaire.
Pour déplacer tous les derniers éléments du tableau d'une étape à l'avance, vous aurez à parcourir le tableau en arrière de sorte que vous ne pas écraser les éléments.
Une fois que vous obtenez l'indice,
vous pouvez
EDIT:
La
999
truc n'est pas nécessaire; il suffit de noter le nombre d'éléments utilisés danssize
(et ajouter de limites appropriées contrôles).Pour pousser le reste de la matrice de l'élément, vous devez utiliser une boucle.
Juste être carfare vous devriez commencer à pousser à partir du dernier élément sinon vous allez affecter le reste des éléments ayant la même valeur
sur l'attribution d'éléments non utilisés avec 999 il n'est pas obligatoire il suffit de définir une touche pour rappeler le dernier élément et l'utiliser au lieu de la taille, puis lors de l'insertion d'un nouvel élément, il suffit de vérifier si vous avez atteint la taille de la matrice.