java循环的时间复杂性

时间:2015-04-19 11:39:30

标签: java algorithm

如何为以下循环找到时间复杂性。

1)

int I, j, k, n, mini, tmp;
for(i = 0; i< k; i++){
    mini = i;
    for(j =i +1; j < n; j++)
        if (a[j] < a[mini])
            mini = j;
        tmp = a[i];
        a[i] = a[mini];
        a[mini] = tmp;
    }
    return a[k-1];
}

2)

void SelectionSort(int A[], int n) {
    int i = 0;
    while (i < n - 1) {
        int j = i + 1;
        while (j < n) {
            if (A[j] < A[i])
                swap(A[j], A[i])
            j++;
        }
        i++;
    }
}

1 个答案:

答案 0 :(得分:0)

两者都是O(n^2) 1,2

在两者中,外部循环从0到n(不包括)运行,并且对于每次迭代 - 内部循环从i + 1运行到n(不包括)。

如果我们总结内循环的运行时间,我们得到:

n- (0+1)  + n- (1+1) + .... + n-(n-1 + 1) = 
= n-1 + n-2 + .... + 0 =
0 + 1 + ... + n-1 = (*)
n(n-1)/2

位于O(n^2)

等式(*)来自sum of aritmetic progression

作为旁注 - 两者都是排序算法,第一个是最小排序,第二个是函数名称,选择排序。


(1)从技术上讲,第一个是O(k^2),但我认为这意味着相同。
(2)假设return a[k-1];应该在关闭外环的范围之后,它的位置是错误的。如果不是错误 - 外部循环只运行一次,复杂性为O(n)