我有以下伪代码:
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?
答案 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条件的结果。