如何判断这些嵌套语句执行的次数?

时间:2015-06-12 06:10:44

标签: algorithm sorting big-o time-complexity complexity-theory

我有以下伪代码:

SelectionSort(A)
    n = A.length
    for j=1 to n-1
        smallest = j
        for i=(j+1) to n
            if A[i] < A[smallest]
                smallest = i
        exchange A[j] with A[smallest]

我认为第一次for循环测试将执行n次,并且嵌套的for循环将执行1 + 2 + ... + n = n(n + 1)/ 2次(如果我和我,请纠正我#39;我错了)。但我不明白如何判断嵌套的if语句会执行多少次?是1/2 * n(n + 1)/ 2?

2 个答案:

答案 0 :(得分:1)

外部for循环将运行n次。但是,它还包含一个内部for循环,它取决于j的值。

  

我认为第一次for循环测试将执行n次,而且   嵌套for循环将执行1 + 2 + ... + n = n(n + 1)/ 2次。

内部for循环将基于外部for循环的所有迭代运行(n-1)+(n-2)+ ... + 1次。因此,循环语句的净迭代合并为(n-1)+(n-2)+(n-3)+ ... + 1 =(n-1)* n / 2 =(n < sup> 2 -n)/ 2次。

  

但我不明白我怎么知道嵌套的次数   if语句会执行吗?是1/2 * n(n + 1)/ 2?

由于inner-if语句依赖于数组元素,因此无法直接确定它将运行多少次。

但是,可以肯定的是,在最坏情况下,因为它位于内部for循环中,所以if语句的最大可能执行次数(在最坏的情况下)将是(n < sup> 2 -n)/ 2次。

  

因此,if语句执行的最坏情况复杂性是   的 为O(n 2

答案 1 :(得分:0)

外环应从1到n-1,因此n-1次 内环应从j + 1运行到n次。这意味着当j为1时,它将运行2到n次(n-1次),当j为n-1时,它将从n次运行到n次(1次)。

因此内循环应该运行(n-1 + n-2 + ... + 1)次= n(n-1)/ 2次。

if语句应执行与内循环相同的次数。当然,有条件的陈述应取决于if条件的结果。