Análisar um algoritmo - (Análise de Complexidade)


O(1) --> 
--> O(log n) -->  
--> O(n log n) -->  
--> O(n) -->  
--> O(n2) -->  
--> O(2n) -->  
--> O(n!);

Estou precisando de uma ajudinha.
Tenho alguns codigos que preciso analizar e dizer em qual O(n) estão.
Exemplo:


public void ordena(int v[]){

int n=v.lenght;
  
 for(int i=0 ; i<n-1 ; i++){
      int min = i;
      for(int j=i+1 ; j<n ; j++){
           if(v[j] < v[mim])
               mim = j;
       }//fim for j

     int x = v[mim];
     v[mim] = v[i];
     v[i] = x;

  }//fim for i

}//fim metodo

********************* Analisando ********************


O for mais interno é O(n-i);

Depois do for j as tres linhas de comando são O(1);

O for externo é O(n2); - (N ao quadrado)

A ajuda é o seguinte: estou a procura de apostilas, sites, programas e exemplos de analise de algoritmo.

Exemplo de exercicio a resolver:

Qual a ordem de complexidade deste somatorio:
Somatorio = 1+1/7+1/49+ . . . + 1/n;
Somatorio de i comecando de 1 ate n;

Ordem de complexidade está relacionada à contagem do número de operações.

Por exemplo, qualquer somatório de 1 a n (incluindo o que você mostrou) envolve n - 1 operações (para a soma), e mais as n avaliações das expressões do somatório (que no seu caso é um quadrado). Mas 2n - 1 é O(n) (ou seja, proporcional a n).

Blz, entendi, mas eu estava querendo material para ver exemplos etc, pois este exemplo que coloquei é um dos mais faceis, tem uns aqui que é o cão chupando manga.