Je ne vois pas pourquoi le tri sélectif est considéré comme un algorithme de tri sur place .
Je veux dire qu'une structure de données supplémentaire remplie avec les éléments du tableau à trier, c'est-à-dire un tas, est utilisée pour aider à l'extraction de la valeur min et au processus de tri.
Alors peut-être que je me méprends sur la définition de inplace ici?
Mais par exemple par insertion, il est évident qu'il s'agit d'un algorithme in situ, c'est-à-dire qu'aucune mémoire supplémentaire n'est nécessaire pour les éléments.
Alors pourquoi est-il considéré comme étant en place?
la source
Il se peut que vous manquiez la compréhension fondamentale qu'un tableau peut être utilisé pour spécifier la disposition d'une arborescence.
Supposons que vous ayez un arbre binaire et qu'un nœud intérieur se trouve à l'index i du tableau. Ensuite, l'index du tableau du parent et des enfants de ce nœud peut être trouvé par:
Voir:
http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/heapSort.htm
Étant donné que le tas peut être conservé et organisé entièrement dans un tableau, le heapsort peut s'exécuter sur place en déplaçant des éléments à l'intérieur du tableau d'entrée. En effet, le tas est construit et manipulé à l'aide du tableau d'entrée d'origine.
la source
Si, comme vous le dites, il fallait vraiment une structure supplémentaire pour construire le tas, alors heapsort ne serait en effet PAS un algorithme de tri sur place.
Cependant, ce n'est pas le cas. Vous pouvez créer le tas sur le même tableau que vous souhaitez trier, et après cela, vous appliquez l'algorithme heapsort, afin qu'il trie sur place.
la source
Wikipedia - Algorithme sur place
la source
Il est considéré comme étant en place car ses exigences d'espace sont négligeables (constantes ou nulles du tout si vous utilisez des opérations au niveau du bit pour échanger des éléments). MergeSort, par exemple, n'est pas en place car le jeu d'entrée n'est pas modifié à chaque itération de l'exemple de recherche.
La meilleure façon d'illustrer les différences entre les algorithmes en place et les algorithmes hors lieu est probablement de regarder le code d'inversion de chaîne C / C ++ suivant qui le fait en place (de K&R):
Si vous lisiez, par exemple, la chaîne d'entrée depuis la fin et placiez les caractères dans un autre tampon, ce serait un algorithme d'inversion de chaîne hors de propos.
la source