Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用中位数排序数组_Arrays_Algorithm_Sorting_Median - Fatal编程技术网

Arrays 使用中位数排序数组

Arrays 使用中位数排序数组,arrays,algorithm,sorting,median,Arrays,Algorithm,Sorting,Median,因此,我们假设您有一个方法的算法,可以找到一个数组的中位数,并调用这个方法X。X基本上可以在O(n)时间内找到一个数组的中位数a(a未排序)。我如何能够设计一个O(nlogn)时间算法来对数组a进行排序,使用X作为辅助方法。 我真的无法理解中值将帮助我对数组进行排序这一事实 感谢快速排序中的,如果轴是随机选择的,则对数组进行排序的最坏情况复杂性为O(n^2) 但也有快速排序的变体,其最坏情况下的时间复杂度为O(nlgn)。在这些变体中,枢轴元素是数组的中位数(n/2个元素),或者枢轴位置是数组大

因此,我们假设您有一个方法的算法,可以找到一个数组的中位数,并调用这个方法X。X基本上可以在O(n)时间内找到一个数组的中位数a(a未排序)。我如何能够设计一个O(nlogn)时间算法来对数组a进行排序,使用X作为辅助方法。 我真的无法理解中值将帮助我对数组进行排序这一事实


感谢快速排序中的,如果轴是随机选择的,则对数组进行排序的最坏情况复杂性为O(n^2)


但也有快速排序的变体,其最坏情况下的时间复杂度为O(nlgn)。在这些变体中,枢轴元素是数组的中位数(n/2个元素),或者枢轴位置是数组大小的函数,因此它可以将数组分成两部分,这两部分是数组大小的函数(不是常数)。

可以通过递归应用X来解决此问题。考虑下面的子例程Y:

  • 给定一个长度为
    n
    的数组作为输入,我们首先应用方法X来找到输入数字的中位数
    m
    ,这需要时间
    O(n)
  • 然后,我们扫描输入数组,重新排列数组中的数字,使得所有小于“代码>M < /代码>的数字都在数组的左侧,而所有的数字大于 M位于数组的右侧(并且<代码> M< /代码>在数组的中间),请注意,这个步骤也需要时间<代码>(n)
  • 因此,在长度
    n
    的输入数组上,子程序Y总共花费
    O(n)
    时间

    因此,如果您递归地将子程序Y应用于中位数
    m
    左右的子数组并继续该过程,则输出将是一个排序数组,总时间如下所示:

    T(n) = O(n) + 2 * O(n/2) + 4 * O(n/4) + ... + 2^log(n) * O(n / 2^log(n)) 
         = O(n) + O(n) + O(n) + ... + O(n)     // log(n) terms in total
         = O(n log(n))
    
    给你,大个子: