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;
}
內循環迭代:n +(n-1)+(n-2)+(n-3)+ ... + 1次。爲什麼冒泡排序O(n^2)?
外循環迭代:n次。
所以,你得到N *
是不是N *(N *(N + 1)/ 2)(數字1到n的總和)= N *((N^2)+ n/2)
這將是(n^3)+(n^2)/ 2 = O(n^3)?
我很積極我做錯了。爲什麼不是O(n^3)?
你正在計算外'n'兩次。你的內部循環本身是O(n)。 – 2012-07-13 20:20:40
不要挑剔,但你顯示的算法是[選擇排序](http://en.wikipedia.org/wiki/Selection_sort)不是[泡泡排序](http://en.wikipedia.org/wiki/Bubble_sort ) – 2012-07-13 20:33:16
上週,我寫了一篇關於漸近複雜性的文章,巧合之處在於,我以泡泡排序爲例。給它一個鏡頭:-)(http://en.algoritmy.net/article/44682/Asymptotic-complexity)。正如亨克所說的那樣,你的錯誤是內層循環是O(n)。 O(n^2) - 算術順序的總和是兩個循環的複雜度。 – malejpavouk 2012-07-13 20:39:14