我在这里找到了C ++中算法的实现
https://gist.github.com/andlima/1774060
但我不明白几行的目的以及它们如何工作,


我是否应该添加一条if语句,如果n小于一定数量,我们应该对数组进行排序并返回v [k]?
在第4行中,为什么我们通过将变量增加4来创建变量?我知道我们必须将其除以5才能得到少量的小数组
6行中的“ for循环”负责什么?它是用于将主数组拆分为较小的数组,然后进行排序,然后创建一个中位数数组吗?为什么会有交换函数,为什么我们将其拆分为if和else条件?
为什么我们在调用同一函数行之前删除中位数数组
在25行中进行for循环,在33行中进行循环,在38行中进行交换的目的是什么?


对于此方面的任何帮助,我将非常感谢。

最佳答案

这是一个优化。一个实现可以做到,但不必这样做。
进行四次加法将除法结果四舍五入。这是整数除法的常见技巧:如果要对除以N的结果取整,请在除法之前添加N-1
第6行上的循环负责迭代数组的五元素块。 if条件检查该块是否具有五个元素。内部的for循环执行选择排序,交换元素以将中位数放置在索引w[2]
递归调用结束后,我们便立即删除medians,因为该算法的其余部分不需要它。
第25行上的循环将pivot移至数组的结束位置。

关于c++ - 中位数理解代码的中位数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41650701/

10-14 09:34