算法导论-9-2其它题目见第9章 排序和顺序统计学
题目:
说明如何利用一个线性时间的中位数算法(如9.3节中的SELECT),来在最坏情况下O(n)时间内求出n个数的带权中位数
思考:
step1:利用SELECT中寻找中值的中值的算法,找到主元
step2:用主元把数组分为三段,即A[1..q-1] < A[q] < A[q+1..r]
step3:计算A[1..q-1]<0.5和A[1..q]>=0.5的权值和,是否满足题目中的公式
step4:若满足,A[q]就是所求的数
step5:若不满足,就继续递归使用本算法进行递归查找。偏大就找前半段,偏小就找后半段
代码:
#include <iostream>
using namespace std;
struct node
{
int value;
double weight;
};
void Print(node *A, int len)
{
int i;
for(i = 1; i <= len; i++)
cout<<A[i].value<<' ';
cout<<endl;
for(i = 1; i <= len; i++)
cout<<A[i].weig