Não vejo por que o heapsort é considerado um algoritmo de classificação local .
Quero dizer, uma estrutura de dados extra preenchida com os elementos da matriz a ser classificada, ou seja, um monte, é usada para auxiliar na extração do valor mínimo e no processo de classificação.
Então, posso estar entendendo mal a definição de lugar aqui?
Mas tipo de inserção, por exemplo, é óbvio que é um algoritmo local, ou seja, nenhuma memória extra é necessária para os elementos.
Então, por que é considerado local?
fonte
Você pode estar perdendo o entendimento fundamental de que uma matriz pode ser usada para especificar o layout de uma árvore.
Suponha que você tenha uma árvore binária e um nó interior esteja no índice i da matriz. Em seguida, o índice de matriz do pai e filhos desse nó pode ser encontrado por:
Vejo:
http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/heapSort.htm
Como o heap pode ser mantido e organizado inteiramente em uma matriz, o heapsort pode ser executado no local movendo elementos ao redor da matriz de entrada. De fato, o heap é construído e manipulado usando a matriz de entrada original.
fonte
Se, como você diz, realmente é necessário uma estrutura extra para construir o heap, o heapsort NÃO será realmente um algoritmo de classificação local.
No entanto, este não é o caso. Você pode construir o heap na mesma matriz que deseja classificar e, depois disso, aplicar o algoritmo heapsort, para que ele seja classificado no local.
fonte
Wikipedia - Algoritmo no local
fonte
É considerado no local porque seus requisitos de espaço são insignificantes (constantes ou nenhum, se você estiver usando operações bit a bit para trocar itens). MergeSort, por exemplo, não está no lugar porque o conjunto de entrada não é modificado em cada iteração do exemplo de pesquisa.
A melhor maneira de ilustrar as diferenças entre algoritmos no local e fora do local é provavelmente observar o seguinte código de reversão de string C / C ++ que o faz no local (da K&R):
Se você estivesse, por exemplo, lendo a string de entrada do final e colocando os caracteres em outro buffer, seria um algoritmo de reversão de string fora do lugar.
fonte