我准备进行软件开发人员访谈和审核算法。我坚持要问一个问题"给定一个修改后的选择排序算法,该算法按照排序顺序返回 k 大小为 n 的数组中的最小元素在 n 和 k 方面最糟糕的运行时间是什么?"
修改选择排序算法:
A = [1...n] //an array of size n
for i = 1 to k
smallest = A[i]
for j = i + 1 to n
if A[j] < A[smallest]
smallest = j
swap (A[i], A[smallest])
我猜它是O(nk)但不确定原因。
答案 0 :(得分:3)
外循环运行k次。对于外循环的每次迭代,内循环进行O(n)次迭代。
在数学上,内循环运行:
(n-1) + (n-2) + (n-3) + .... + (n-k) times
= n*k - k*(k+1)/2
= k* (n - k/2 -1/2)
~ k * n
Hence, Complexity = O(n*k)
答案 1 :(得分:2)
O(nk)
外循环选择k
元素和内循环选择n
元素