思路:先排好序再取第【L/2】(向上取整)个位置的数。
关键点:
1.从1开始的向上取整=从0开始的向下去整。
数组下标 0 1 2 3 4 5 6 7 8 9
位序 1 2 3 4 5 6 7 8 9 10
序列 2 4 6 8 11 13 15 17 19 20
中位数:从1开始向上取整:L/2=10/2=5 第5个
从0开始向下取整:9/2 =4 数组下标为4
数组下标 0 1 2 3 4
位序 1 2 3 4 5
序列 2 4 6 8 20
中位数:从1开始向上取整:L/2=5/2=3 第3个
从0开始向下取整:4/2=2 数组下标为2
#include<bits/stdc++.h>
using namespace std;
int a[5]={11,13,15,17,19};
int b[5]={2,4,6,8,20};
int c[10];
int merge(int a[],int b[],int c[]){
int i=0,j=0,k=0;
while(j<5 && i<5){
if(a[i]<b[j]) c[k++]=a[i++];
else c[k++]=b[j++];
}
while(i<5) c[k++]=a[i++];
while(j<5) c[k++]=b[j++]; //这里k结束会自增一下,所以最后要减一
return c[(k-1)/2];
}
int main(){
int t=merge(a,b,c);
cout<<t<<endl;
return 0;
}