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;
}
Vòng lặp bên trong đang lặp: n + (n-1) + (n-2) + (n-3) + ... + 1 lần.Tại sao bong bóng sắp xếp O (n^2)?
Vòng lặp ngoài lặp lại: n lần.
Vì vậy, bạn sẽ có được n * (tổng của các số từ 1 đến n)
Mà không phải là n * (n * (n + 1)/2) = n * ((n^2) + n/2)
Điều gì sẽ là (n^3) + (n^2)/2 = O (n^3)?
Tôi tích cực Tôi đang làm điều này sai. Tại sao không phải là O (n^3)?
Bạn đang đếm bên ngoài 'n' hai lần. Vòng lặp bên trong của bạn là O (n). –
Không phải để nitpick nhưng thuật toán bạn hiển thị là một [Selection sort] (http://en.wikipedia.org/wiki/Selection_sort) không phải là [Bubble sort] (http://en.wikipedia.org/wiki/Bubble_sort) –
Tuần trước, tôi đã viết bài báo về sự phức tạp tiệm cận và trùng hợp ngẫu nhiên, tôi sử dụng loại bong bóng làm ví dụ. Cung cấp cho nó một shot :-) (http://en.algoritmy.net/article/44682/Asymptotic-complexity). Sai lầm của bạn, như nó đã được nói đúng bởi Henk, rằng vòng lặp bên trong là O (n). O (n^2) - tổng số thứ tự số học là độ phức tạp của cả hai vòng với nhau. – malejpavouk