Para isso, se temos um array ordenado de \(n-1\) elementos \(A[0..n-2]\), para inserir o último elemento nele, o \(A[n-1]\), basta procurar no subarray já ordenado, da direita para a esquerda, o primeiro elemento que seja menor ou igual a \(A[n-1]\), e, quando encontrado, inserir \(A[n-1]\) à sua direita.
Esse algoritmo é mais eficientemente implementado por bottom up, iterativamente.
Diferente do algoritmo de ordenação por seleção, aqui os elementos nem sempre estarão em sua posição final antes de terminar a ordenação por completo.
-
A operação básica do algoritmo acima é a comparação \(A[j ] > v\) e a quantidade que será feita depende da entrada.
A entrada de pior caso é um array com valores estritamente decrescentes, e o número de comparações para uma entrada assim é:
-
Já a entrada de melhor caso, o caso base só é executado uma vez a cada iteração do laço externo, e acontece quando o array da entrada já está ordenado em ordem não decrescente.
-
Na entrada de caso médio, o algoritmo faz em média metade de comparações que em um array decrescente.
-