double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int flag1,flag2;//标记两个数组
int temp1,temp2;//用于存放中位数
int i;
double sum=0;//如果是偶数,sum为中位数的二倍,如果是奇数,sum为中位数本身
int t=nums1Size+nums2Size;//方便后面使用
//先排除一些特殊情况
if(nums1Size==0&&nums2Size==0) return 0;
if(nums1Size == 0){
if(nums2Size%2==0){
sum=nums2[nums2Size/2-1]+nums2[nums2Size/2];
sum/=2;
}else {
sum=nums2[nums2Size/2];
}
return sum;
}
if(nums2Size==0){
if(nums1Size%2==0){
sum=nums1[nums1Size/2-1]+nums1[nums1Size/2];
sum/=2;
}else {
sum=nums1[nums1Size/2];
}
return sum;
}
//标志位的初始化
flag1=flag2=0;
temp1=temp2=0;
for(i=0;i<=t/2;i++){//循环次数也就是指示中位数的变量temp1的移动次数
if(nums1[flag1]<nums2[flag2]){
temp1=nums1[flag1];
if(flag1<nums1Size-1){//如果可以flag1可以后移
flag1++;
}else {
nums1[flag1]=INT_MAX;//否则把他赋最大值,以方便下一次循环将 中位数标志位移动到另一个数组
}
}else {
temp1=nums2[flag2];
if(flag2<nums2Size-1){
flag2++;
}else {
nums2[flag2]=INT_MAX;
}
}
//防止数组超界
if(flag1>=nums1Size) flag1=nums1Size-1;
if(flag2>=nums2Size) flag2=nums2Size-1;
//如果两个数组总数是偶数的话,设置第二个标志位以获取第二个最靠近中位数的数值用以计算
if(t%2==0 && i == t/2-1 ){
temp2=temp1;
}
}
if(t%2 == 0){
sum=temp1+temp2;
sum/=2;//如果是偶数,就求得中位数
}else {
sum=temp1;//如果是奇数,则强制转换为double
}
return sum;
}
贴一个运行结果,待优化