顺序表的结构存放在栈区,存放的内容在堆区
方法一:
1、断言指针不为空
2、申请新空间为两个数组大小之和
3、将两个数组写进去新申请的空间中
在两个数组都没有写进去的情况下,进行比较,小的先写,写完进行下一个的比较,直到其中一个数组完全写完,然后退出比较,将没有写完的数组再写道入新数组中
void hebing(int* p1, int* p2, int m, int n)
{
assert(p1 != NULL && p2 != NULL);
int* newdate = (int*)malloc(sizeof(int) * (m + n));
if (NULL == newdate)
{
exit(1);
}
int i = 0, j = 0,k=0;
while (i < m && j < n)
{
newdate[k++] = p1[i]<=p2[j] ? p1[i++]:p2[j++];
}
while (i < m)
{
newdate[k++] = p1[i++];
}
while (j < n)
{
newdate[k++] = p2[j++];
}
for (int i = 0; i < m + n; i++)
{
p1[i] = newdate[i];
}
free(newdate);
newdate = NULL;
}
方法二:
从后向前依次放去,如果数组2先放完,则排序成功,如果数组一先放完,将数组二剩下的依次放入到数组一剩下的位置中
void hebing2(int* p1, int* p2, int m, int n)
{
assert(p1 != NULL && p2 != NULL);
int i = m - 1, j = n - 1,k = m + n - 1;
while (i >= 0 && j >= 0)
{
p1[k--] = p1[i] >= p2[j] ? p1[i--] : p2[j--];
}
while (j >= 0)
{
p1[k--] = p2[j--];
}
}