描述
乙個長度為l(l≥1)的公升序序列s,處在第l/2(若為小數則去掉小數後加1)個位置的數稱為s的中位數。例如,若序列s1=(11,13,15,17,19),則s1的中位數是15。兩個序列的中位數是含它們所有元素的公升序序列的中位數。例如,若s2=(2,4,6,8,20),則s1和s2的中位數是11。現有兩個等長公升序序列a和b,試實現乙個在時間和空間兩方面都盡可能高效的演算法,找出兩個序列a和b的中位數。
輸入多組資料,每組資料有三行,第一行為序列的長度n,第二行為序列a的n個元素,第三行為序列b的n個元素(元素之間用空格分隔)。當n=0時輸入結束。
輸出對於每組資料分別輸出兩個序列的中位數,佔一行。
輸入樣例 1
5
11 13 15 17 19
2 4 6 8 20
61 2 3 4 5 6
7 8 9 10 11 12
0
輸出樣例 1
11
6
#include using namespace std;
typedef struct lnodelnode,*linklist;
void initlist(linklist &l)
void createlist_r(linklist &l,int n)
}void create2list(linklist &a,linklist &b,int n,int m)
void show(linklist &a)
coutlinklist pa=a->next;
linklist pb=b->next;
linklist pc=c;
linklist t;
while(pa&&pb)
else if(pa->data < pb->data)
else if(pa->data = pb->data)
}if(pa==null&&pb!=null)pc->next=pb;
else if(pb==null&&pa!=null)pc->next=pa;
a=c;
//show(c);
}int listlength(linklist l)
return i;
}int main()
coutn;m=n;
} return 0;
}
求解兩個等長公升序序列的中位數
2011年計算機聯考真題 題目描述 乙個長度為l l 1 的公升序序列s,處在第 l 2 個位置的數稱為s的中位數。例如,若序列s1 11,13,15,17,19 則s1的中位數是15,兩個序列的中位數是含它們所有元素的公升序序列的中位數。例如,若s2 2,4,6,8,20 則s1和s2的中位數是1...
兩個等長公升序序列找中位數
乙個長度為 l 的公升序序列 s,處在第 個位置的數稱為 s 的中位數。例如,若序列 則 的中位數是 15,兩個序列的中位數是含他們所有元素的公升序序列的中位數。例如,若 則 和 的中位數是 11。現在有兩個等長公升序序列 a 和 b,試設計乙個演算法,找出兩個序列 a 和 b 的中位數。把 a 和...
(演算法)C語言得到兩個公升序序列的中位數
乙個長度為l l 1 的公升序序列s,處在第 l 2 個位置的數稱為s的中位數。例如,若序列s1 11,13,15,17,19 則s1的中位數是15,兩個序列的中位數是含它們所有元素的公升序序列的中位數。例如,若s2 2,4,6,8,20 則s1和s2的中位數是11。現在有兩個等長公升序序列a和b,...