求解兩個公升序序列的中位數

2021-10-02 22:41:17 字數 1249 閱讀 7651

描述

乙個長度為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,...