Contamos o número de leituras e gravações de elementos da matriz. Para fazer a classificação por bolhas, você precisa de acessos (a gravação inicial até o fim e, no pior dos casos, duas leituras e duas gravações para fazer trocas). Para fazer a pesquisa binária, precisamos de ( para pesquisa binária e, na pior das hipóteses, para deslocar os elementos da matriz para a direita e, em seguida, 1 para escrever o elemento da matriz em sua posição correta).n 2 log n + 2 n + 1 2 log n 2 n1 + 4 nn2 logn + 2 n + 12 logn2 n
Portanto, ambos os métodos têm a mesma complexidade para implementações de array, mas o método de pesquisa binária requer menos acessos a array a longo prazo ... assintoticamente, metade do mesmo. Existem outros fatores em jogo, naturalmente.
Na verdade, você poderia usar implementações melhores e contar apenas os acessos reais da matriz (não os acessos ao elemento a ser inserido). Você pode fazer para classificação de bolhas e para pesquisa binária ... portanto, se o acesso ao registro / cache for barato e o acesso à matriz for caro, pesquisando a partir do final e mudando ao longo do caminho (bolha mais inteligente tipo para inserção) poderia ser melhor, embora não assintoticamente.log n + 2 n + 12 n + 1logn+2n+1
Uma solução melhor pode envolver o uso de uma estrutura de dados diferente. As matrizes fornecem acessos O (1) (acesso aleatório), mas as inserções e exclusões podem custar. Uma tabela de hash poderia ter O (1) inserções e exclusões, os acessos custariam. Outras opções incluem BSTs e pilhas, etc. Pode valer a pena considerar as necessidades de uso do seu aplicativo para inserção, exclusão e acesso e escolher uma estrutura mais especializada.
Observe também que se você deseja adicionar elementos a uma matriz classificada de elementos, uma boa idéia pode ser classificar eficientemente os itens e mesclar as duas matrizes; Além disso, matrizes classificadas podem ser construídas eficientemente usando, por exemplo, pilhas (classificação de pilha).n mmnm