乙個長度為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,試設計乙個在時間和空間兩方面都盡可能高效的演算法,找出兩個序列a和b的中位數。
方法一對兩個序列合併為乙個公升序序列s3,則s3[l]就是兩個序列的中位數。(找出第l個元素即可,不用合併)
方法二方法一
#includeint findmid(int s1,int s2,int len)else
}elseelse
}m1 = (l1+r1)/2;
m2 = (l2+r2)/2;
if(r1==l1 || r2==l2) return s1[m1]>s2[m2]?s2[m2]:s1[m1];//剩乙個元素,小的為中位數
}}void main();
int s2 = ;
printf("%d",findmid2(s1,s2,5));
}
求解兩個公升序序列的中位數
描述 乙個長度為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。現...
兩個等長公升序序列找中位數
乙個長度為 l 的公升序序列 s,處在第 個位置的數稱為 s 的中位數。例如,若序列 則 的中位數是 15,兩個序列的中位數是含他們所有元素的公升序序列的中位數。例如,若 則 和 的中位數是 11。現在有兩個等長公升序序列 a 和 b,試設計乙個演算法,找出兩個序列 a 和 b 的中位數。把 a 和...
求解兩個等長公升序序列的中位數
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...