快速查找中位数(期望O(N)的算法)

类似于快速排序那种,只不过另加处理一番。

附上代码:

#include
using namespace std;
const int maxn=1e2+5;
int n,a[maxn];
double select_middle(int beg,int end)
{
    if(n==1)return a[0];
    int i=beg;
    for(int j=i+1;j<=end;j++){
        if(a[j]n/2)return select_middle(beg,i-1);
    else{
        if(n%2)return a[i];
        else{
            int m=a[0];
            for(int j=1;jm){
                    m=a[j];
                }
            }
            return (double)(a[i]+m)/2;
        }
    }
}
int main()
{
    scanf("%d",&n);
    for(int i=0;i

 

你可能感兴趣的:(快速查找中位数(期望O(N)的算法))