寻找一个数组中的中位数,这个是容易的,两个数组的话,将他们合并即可,当然有更加简便 的方法,这里我们用最原始的方法(本人也是个新手):将两个数组合并后,进行排序从大到小,用qsort函数进行排序。
void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*));
qsort函数:第一个实参是需要排序的数组的首元素的地址,也就是数组名,num就是数组的元素个数,可以用sizeof来计算
int sz=sizeof(arr)/sizeof(arr[0]);
这样来得出,第三个参数就是数组的每个元素的大小,最后一个就是进行各种不同类型而排序的函数的指针,代码如下(这里是整型数组进行升序的排序,降序将a,b颠倒过来即可),作为参数时直接写函数名即可:
int inc(const vvoid* a,const void* b)
{
return *(int*)a-*(int*)b;
}
整体大概部分就概述完了,本人权当练习,如果有哪里做的不好,还请各位大佬指正
本体代码如下:
int inc(const void* a, const void* b)
{
return *(int*)a - *(int*)b;
}
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size)
{
int k;
int n = nums1Size;
int th;
double ret;
int arr[100];
for (int i = 0; i < nums1Size; i++)
{
arr[i] = nums1[i];
}
for (int j = 0; j <nums2Size; j++)
{
arr[n] = nums2[j];
n++;
}
k = nums1Size+nums2Size;
qsort(arr, k, 4, inc);
if (k % 2 == 0)
ret = (arr[k / 2 - 1] + arr[k / 2]) * 0.5;
else
ret = arr[k / 2];
return ret;
}
int main()
{
double ret = 0;
int arr1[] = { 1,2};
int arr2[] = { 3,4 };
ret = findMedianSortedArrays(arr1, 2, arr2, 2);
printf("%lf", ret);
return 0;
}