Pourquoi est-bulle de tri en O(n^2)?

int currentMinIndex = 0;

for (int front = 0; front < intArray.length; front++)
{
    currentMinIndex = front;

    for (int i = front; i < intArray.length; i++)
    {
        if (intArray[i] < intArray[currentMinIndex])
        {
            currentMinIndex = i;
        }
    }

    int tmp = intArray[front];
    intArray[front] = intArray[currentMinIndex];
    intArray[currentMinIndex] = tmp;
}

La boucle interne est une itération: n + (n-1) + (n-2) + (n-3) + ... + 1 fois.

La boucle externe est une itération: n fois.

De sorte que vous obtenez n * (la somme des nombres de 1 à n)

N'est pas n * ( n*(n+1)/2 ) = n * (n^2) + n/2 )

Qui serait (n^3) + (n^2)/2 = O(n^3) ?

Je suis positif, je suis en train de faire ce mal. Pourquoi n'est-ce pas O(n^3)?

Vous comptez l'extérieur n deux fois. Votre intérieur de la boucle elle-même est O(n).
Pas pour pinailler, mais l'algorithme de vous montrer, c'est un tri de la Sélection pas tri à Bulles
La semaine dernière, j'ai écrit l'article sur asymptotique de la complexité et, par hasard, j'utilise de tri à bulles comme un exemple. Donner un coup de feu 🙂 (en.algoritmy.net/article/44682/Asymptotic-complexity). Votre erreur est, comme il a bien été dit par Henk, que la boucle interne est O(n). O(n^2) - la somme de l'arithmétique d'ordre est la complexité de chacune des deux boucles ensemble.
Je suis d'accord, ce n'est pas de tri à bulles

OriginalL'auteur ordinary | 2012-07-13