【问题标题】:What is the running time of this modified selection sort algorithm?这个修改后的选择排序算法的运行时间是多少?
【发布时间】:2014-08-23 00:44:59
【问题描述】:

我正在为软件开发人员面试和审查算法做准备。我被困在一个问题上,询问“给定一个修改的选择排序算法,它按排序顺序返回大小为 n 的数组中的 k 个最小元素,最坏的情况是什么以 nk 表示的运行时间?"

改进的选择排序算法:

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),但不知道为什么。

【问题讨论】:

    标签: algorithm time-complexity selection-sort


    【解决方案1】:

    外循环运行 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)
    

    【讨论】:

    • 如果内部for循环中有while语句怎么办?你是怎么计算的?
    • @MNRC 如果内部循环中有 while 语句,则 while 循环中的语句将执行 kn *(while 迭代次数)次。因此,复杂性中会增加另一个因素。它会变成 O(nk*w),其中 w 是最里面的 while 循环的迭代次数(例如,while (i
    • 谢谢!你应该在大学里教这个,比我的教授解释清楚得多!
    • user1990169 : 更改您的用户名 :)
    • @cegprakash 为什么你认为我应该更改我的用户名?名字里有什么?
    【解决方案2】:
    O(nk)
    

    外循环选择 k 元素,内循环选择 n 元素

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 2011-08-30
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 2017-12-28
      • 1970-01-01
      相关资源
      最近更新 更多