顺序表的结构存放在栈区,存放的内容在堆区
方法一:
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--];}
}