每日程式設計18之中位數 任意第K大的元素

2021-06-13 00:31:49 字數 526 閱讀 3438

中位數(中指)是指一串元素序列中值處於中間的那個元素。

求中位數最直觀的一種想法是,先將資料排個序,然後取中間元素,平均複雜度為o(nlogn)。

另一種巧妙的想法是利用快速排序的劃分步驟,每次將元素序列劃分二份,中位數必然存在於其中的乙個子串行,這樣每次劃分都可以拋去部分序列。

這種演算法的時間複雜度為o(n)

遞迴函式,求解(p,q)序列中的第k個元素,,...int midvalue(p,q,k)

初始時為求解(0,n-1)序列中的第n/2個元素,,int midvalue(0,n-1,n/2)

每次按照快速排序中劃分方式進行劃分,確定pivot value的位置pos,

然後進行判斷,若pos==p+k,則返回a[pos]的值

若pos>k,則說明需要的第k個元素在左子串行,直接求座子序列的第k個元素,midvalue(p,pos-1,k)

若pos

核心**:

int midvalue(int a,int p,int q,int k)

over!!!

BFPRT演算法(中位數之中位數)初窺 五

bfprt演算法的作者是5位真正的大牛 blum floyd pratt rivest tarjan 該演算法入選了在stackexchange上進行的當今世界十大經典演算法,而演算法的簡單和巧妙頗有我們需要借鑑學習之處。bfprt解決的問題十分經典,即從某n個元素的序列中選出第k大 第k小 的元素...

樹狀陣列 二分 中位數之中位數

給出乙個長度為 n 的序列 a 首先求出其所有區間的中位數,將這些中位數構成的集合記為 s 求 s 中所有數的中位數。此題中位數指 有 n 個數,第 left lfloor frac right rfloor 1 個數即為中位數。資料範圍 1 leq n leq 10 5,1 leq a i leq...

演算法導論之中位數和順序統計量(3)

在乙個由n個元素組成的集合中,第i個順序統計量是該集合中的第i小的元素。本章的演算法正是找出乙個互異的元素集合中的第i小的元素。單個的最小值和最大值 在乙個有n個元素的集合中,我們要確定其中最小的元素,必須要進行n 1次比較,正如minmum a 演算法顯示的這樣 minmun a min a i ...