3,882
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
int* Merge(int left[], int right[]);
int* MergeSort(int n[], int start, int end);
int main()
{
int n[] ={5, 3, 7, 3, 6, 4};
int *m = MergeSort(n, 0 ,5);
for(int i = 0; i < 6;i++)
{
cout <<m[i]<< endl;
}
system("PAUSE");
}
int* MergeSort(int n[],int start, int end)
{
int mid = (start+end)/2;
cout << "--------------------------------------" << endl;
if(start == end)
{
return &n[start];
}
else
{
return Merge(MergeSort(n, start, mid), MergeSort(n, mid+1, end));
}
}
int* Merge(int left[], int right[])
{
int *n;//用于返回将两个子数组组合而成的新的有序数组
int left_length = sizeof(left)/4;//左边数组长度
int right_length = sizeof(right)/4;//右边数组长度
int length = left_length + right_length;//返回数组长度
n = new int[length];
int left_index = 0, right_index = 0;//用于标识当前子数组所比较的位置
int insert_index = 0;//插入返回数组的当前位置
while(insert_index < length)
{
if(left[left_index] > right[right_index])
{
n[insert_index] = left[left_index];
left_index++;
}
else if(left[left_index] <= right[right_index])
{
n[insert_index] = right[right_index];
right_index++;
}
else if(left_index == left_length - 1)
{
n[insert_index] = right[right_index];
right_index++;
}
else if (right_index == right_length - 1)
{
n[insert_index] = left[left_index];
left_index++;
}
insert_index++;
}
//cout << "______________________________________" << endl;
return n;
}
int a[3];
int func(int ver[]);
// 调用,相当于传了一个 int *
func(a);
我定义了一个数组int n[] = {.....},使用sizeof(n)/sizeof(n[0])可以得到,但我使用int n[]作为一个函数的参数的时候,是否相当于只是传了数组的的一个指针过去?请问有什么办法取得这个参数数组的长度呢?[/quote]sizeof(n)/sizeof(n[0])可以得到,但我使用int n[]作为一个函数的参数的时候,是否相当于只是传了数组的的一个指针过去?请问有什么办法取得这个参数数组的长度呢?int left_length = sizeof(left)/4;//左边数组长度
int right_length = sizeof(right)/4;//右边数组长度
并不能获得数组的长度,数组名当函数参数时会退化为指针,sizeof(指针) 固定为长度4.