给俩个有序数组(从小到大),判断两者中全部元素的中位数

#include<stdio.h>
#include<stdlib.h>

int main()
{
    
    
	int nums1Size = 2,nums2Size = 2;
	int nums1[2]={
    
    1,2},nums2[2]={
    
    3,4};
	double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size);
	double b=findMedianSortedArrays(nums1, nums1Size,nums2, nums2Size);
    printf("%lf",b);
} 
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){
    
    
            int all = nums1Size + nums2Size;
            int i=0,j=0,k=0;
            int* nums3=(int* )malloc(sizeof(int)*all);//创一个空间 
            //将两数组中的数放入第三个数组中 
            while(i<nums1Size && j<nums2Size)
            {
    
    
                    if(*(nums1+i)<=*(nums2+j)){
    
    
                        nums3[k++] = *(nums1+i);
                        j--; 
                    }   
                    else{
    
    
                        nums3[k++] = *(nums2+j);
                        i--;
                    }
                    i++;
                    j++;
            }
			//补上剩下的数 
            if(nums1Size <= i){
    
    
                while(nums2Size > j){
    
    
                     nums3[k++] = *(nums2+j);
                     j++;
                }
            }
            else if(nums2Size <= j){
    
    
                while(nums1Size > i){
    
    
                      nums3[k++] = *(nums1+i);
                      i++;
                }
            }   
        if(all%2 != 0){
    
                      //奇数
              return nums3[(all-1)/2];
        }   
        else{
    
                 //偶数
              double midage = (double)(nums3[all/2]+nums3[(all-2)/2])/2;
              return midage; 
        } 
        return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_52001969/article/details/112769478