2010-06-07 3 views
3

Je voudrais écrire un morceau de code pour insérer un numéro dans un tableau trié à la position appropriée (à savoir le tableau doit encore rester triés après l'insertion)Insertion d'un nombre dans un tableau trié!

Ma structure de données ne permet pas de doublons.

Je prévois de faire quelque chose comme ceci:

  1. Trouver l'index droit où je consacrions cet élément en utilisant la recherche binaire
  2. Créer un espace pour cet élément, en déplaçant tous les éléments de cet indice vers le bas.
  3. Mettez cet élément là.

Existe-t-il un autre moyen?

+1

Savez-vous ce qu'est un arbre binaire auto-équilibré? – kennytm

+0

Si vous souhaitez utiliser un tableau simple, je ne vois pas d'autres solutions que celle que vous avez décrite. – ShinTakezou

+0

Le problème est que je suis contraint d'utiliser la mémoire contiguë. Je ne vois pas comment je peux faire ça avec des arbres. Y a-t-il un moyen? – Jay

Répondre

6

Si vous avez vraiment un tableau et pas une meilleure structure de données, c'est optimal. Si vous êtes flexible sur la mise en œuvre, jetez un oeil à AA Trees - Ils sont plutôt rapides et faciles à mettre en œuvre. Évidemment, prend plus d'espace que le tableau, et cela ne vaut pas la peine si le nombre d'éléments n'est pas assez grand pour remarquer la lenteur du blit par rapport à la magie du pointeur.

1

Une implémentation d'un arbre basée sur le tas serait plus efficace si vous insériez un grand nombre d'éléments - log n pour les opérations de localisation/suppression et d'insertion.

1

Les données doivent-elles être triées complètement tout le temps? Si ce n'est pas le cas, s'il est seulement nécessaire d'accéder rapidement à l'élément le plus petit ou le plus élevé, Binary Heap donne le temps d'accès constant et le temps d'addition et de suppression de la connexion. Plus il peut satisfaire votre condition que la mémoire devrait être consécutive, puisque vous pouvez implémenter un BinaryHeap au-dessus d'un tableau (I.e; array [2n + 1] left child, array [2n + 2] right child).

Questions connexes