求算法高手算下这个时间复杂度

发布于 2022-09-12 01:33:09 字数 745 浏览 14 评论 0

function partition(numbers: array, low: integer, high: integer)
i: integer = low
j: integer = high
tmp: integer
pivot: integer = numbers[(low + high) / 2]

loop(while i <= j)
  loop(while numbers[i] < pivot)
  i++
end loop

loop(while numbers[j] > pivot)
  j--
end loop

if(i <= j)
  tmp = numbers[i]
numbers[i] = numbers[j]
numbers[j] = tmp
i++
j--
end if
  end loop

return i
end function

function sort(numbers: array, low: integer, high: integer)
index: integer = partition(numbers, low, high)
if(low < index - 1)
  sort(numbers, low, index - 1)
end if
  if(index < high)
    sort(numbers, index, high)
end if
  end function

partition这个方法是干嘛的?
这个算法的时间复杂度是多少?
如果没有排序,而是随机的顺序,那时间复杂度是多少?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

离不开的别离 2022-09-19 01:33:09

这是一个最简单的快速排序程序。

partition这个方法是干嘛的?

你先去了解下什么是快速排序,自然就理解了。

这个算法的时间复杂度是多少?

最佳时间复杂度 - nlog(n);最差时间复杂度 - n*n。详见 https://subetter.com/algorith...

如果没有排序,而是随机的顺序,那时间复杂度是多少?

一个算法的时间复杂度我们一般有三个指标,最差、最佳、平均。前两个已经说过了,第三个解释起来很难,我也没本事解释,因为这确实很难很难很难!但可以告诉你答案,因为大牛已经解释过了,是 nlog(n)

困倦 2022-09-19 01:33:09

partition方法做了以下事情:
1.在当前数组[begin, end]中找一个数字作为基准数
2.遍历数组,把比基准数小的都放在基准数左边,把比基准数大或者等于的都放在其右边,这样基准数所在的位置就是排序后它应该在的位置。
递归上述过程,分别对基准数左边和右边的子数组做partition操作。

这是快排的思路。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文