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;
}
Il ciclo interno sta iterando: n + (n-1) + (n-2) + (n-3) + ... + 1 volte.Perché bubble sort O (n^2)?
Il ciclo esterno sta iterando: n volte.
in modo da ottenere n * (la somma dei numeri da 1 a n)
non è che n * (n * (n + 1)/2) = n * ((n^2) + n/2)
Quale sarebbe (n^3) + (n^2)/2 = O (n^3)?
Sono positivo, sto sbagliando. Perché non è O (n^3)?
Si sta contando il 'n' esterno due volte. Il tuo ciclo interno stesso è O (n). –
Non per nitpick ma l'algoritmo che mostri è un [Selection sort] (http://en.wikipedia.org/wiki/Selection_sort) non un [Bubble sort] (http://en.wikipedia.org/wiki/Bubble_sort) –
La scorsa settimana, ho scritto un articolo sulla complessità asintotica e per coincidenza, io uso bubble sort come esempio. Dagli un colpo :-) (http://en.algoritmy.net/article/44682/Asymptotic-complexity). Il tuo errore è, come è stato correttamente detto da Henk, che il ciclo interno è O (n). O (n^2) - la somma dell'ordine aritmetico è la complessità di entrambi i cicli insieme. – malejpavouk