C++ 我们可以将数组变量添加到整数中吗?
这是一个求两个排序数组的中值的程序 一种基于分治的高效解决方案,用于寻找两个大小相同的排序数组的中值C++ 我们可以将数组变量添加到整数中吗?,c++,c,arrays,sorting,C++,C,Arrays,Sorting,这是一个求两个排序数组的中值的程序 一种基于分治的高效解决方案,用于寻找两个大小相同的排序数组的中值 #include<bits/stdc++.h> using namespace std; int median(int [], int); /* to get median of a sorted array */ /* This function returns median of ar1[] and ar2[]. Assumptions
#include<bits/stdc++.h>
using namespace std;
int median(int [], int); /* to get median of a sorted array */
/* This function returns median of ar1[] and ar2[].
Assumptions in this function:
Both ar1[] and ar2[] are sorted arrays
Both have n elements */
int getMedian(int ar1[], int ar2[], int n)
{
/* return -1 for invalid input */
if (n <= 0)
return -1;
if (n == 1)
return (ar1[0] + ar2[0])/2;
if (n == 2)
return (max(ar1[0], ar2[0]) + min(ar1[1], ar2[1])) / 2;
int m1 = median(ar1, n); /* get the median of the first array */
int m2 = median(ar2, n); /* get the median of the second array */
/* If medians are equal then return either m1 or m2 */
if (m1 == m2)
return m1;
/* if m1 < m2 then median must exist in ar1[m1....] and
ar2[....m2] */
if (m1 < m2)
{
if (n % 2 == 0)
{
return getMedian(ar1 + n/2 - 1, ar2, n - n/2 +1);
}
return getMedian(ar1 + n/2, ar2, n - n/2);
}
/* if m1 > m2 then median must exist in ar1[....m1] and
ar2[m2...] */
if (n % 2 == 0)
return getMedian(ar2 + n/2 - 1, ar1, n - n/2 + 1);
return getMedian(ar2 + n/2, ar1, n - n/2);
}
/* Function to get median of a sorted array */
int median(int arr[], int n)
{
if (n%2 == 0)
return (arr[n/2] + arr[n/2-1])/2;
else
return arr[n/2];
}
/* Driver program to test above function */
int main()
{
int ar1[] = {1, 2, 3, 6};
int ar2[] = {4, 6, 8, 10};
int n1 = sizeof(ar1)/sizeof(ar1[0]);
int n2 = sizeof(ar2)/sizeof(ar2[0]);
if (n1 == n2)
printf("Median is %d", getMedian(ar1, ar2, n1));
else
printf("Doesn't work for arrays of unequal size");
return 0;
}
#包括
使用名称空间std;
整数中值(整数[],整数);/*获取排序数组的中值的步骤*/
/*此函数返回ar1[]和ar2[]的中值。
此函数中的假设:
ar1[]和ar2[]都是排序数组
两者都有n个元素*/
int GETMINAL(int ar1[],int ar2[],int n)
{
/*无效输入返回-1*/
如果(n m2),则中值必须存在于ar1[…m1]中,并且
ar2[m2…]*/
如果(n%2==0)
返回getMedian(ar2+n/2-1,ar1,n-n/2+1);
返回getMedian(ar2+n/2,ar1,n-n/2);
}
/*函数获取排序数组的中值*/
整数中值(整数arr[],整数n)
{
如果(n%2==0)
返回(arr[n/2]+arr[n/2-1])/2;
其他的
返回arr[n/2];
}
/*用于测试上述功能的驱动程序*/
int main()
{
int ar1[]={1,2,3,6};
int ar2[]={4,6,8,10};
int n1=sizeof(ar1)/sizeof(ar1[0]);
int n2=sizeof(ar2)/sizeof(ar2[0]);
如果(n1==n2)
printf(“中值为%d”,获取中值(ar1、ar2、n1));
其他的
printf(“不适用于大小不等的数组”);
返回0;
}
我的问题是如何将数组变量添加到整数中。我的意思是这样做时它是否引用内存(ar1+n/2-1)在表达式中的GetMiddian函数调用?中,数组指示符隐式转换为指向其第一个元素的指针。向指针添加一个整数将再次得到一个指针。这就是所谓的指针算术 例如,如果你有一个数组
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const size_t N = sizeof( a ) / sizeof( *a );
然后表达
a + N / 2
将指向数组的第六个元素
这是一个演示程序
#include <stdio.h>
int main(void)
{
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const size_t N = sizeof( a ) / sizeof( *a );
for ( size_t i = 0; i < N; i++ ) printf( "%p: %d\n", a + i, *( a + i ) );
return 0;
}
另外,像数组一样声明的函数参数也被调整为指针
int median(int a[100], int n);
int median(int a[10], int n);
int median(int a[], int n);
int median(int *a, int n);
是等价的,声明相同的函数。
你问的有点不清楚……这是一个C语言指针算法。你可以在任何关于C或C++的初学者的书中找到有关它的信息。谢谢你,Vald,我得到了答案。int median(int a[100], int n);
int median(int a[10], int n);
int median(int a[], int n);
int median(int *a, int n);