C++每日一练8.合并两个有序的数组
Posted 鱼酱2333
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++每日一练8.合并两个有序的数组相关的知识,希望对你有一定的参考价值。
合并两个有序的数组
- 算法1
class Solution
public:
void merge(int A[], int m, int B[], int n)
int i=0,j=0,p=0;
int c[m+n];//定义辅助数组C
while(i<m&&j<n)
c[p++]=A[i]<=B[j]?A[i++]:B[j++];//将A[i]和B[j]中小的那个丢入C中
while(i<m)//如果A中有剩余
c[p++]=A[i++];
while(j<n)//如果B中有剩余
c[p++]=B[j++];
for(int i=0;i<p;i++)A[i]=c[i];//因为题目要求,将C数组拷贝到A数组中
;
- 算法2
class Solution
public:
void merge(int A[], int m, int B[], int n)
int i=m-1,j=n-1,p=m+n-1;//i,j指针指向原末尾,p指针指向合并后的A末尾
while(~i&&~j) // ~i <==> i>=0,因为-1取反过后返回的是0,位运算一般情况比其他运算符速度要快
A[p--]=A[i]>B[j]?A[i--]:B[j--];//合并A、B数组, 比较i,j指针指向的元素,将大的那个丢进去
while(~j)//如果B数组还有剩余,则直接全部移到A数组中
A[p--]=B[j--];
/*此处如果出现A数组有剩余的情况,理论上应该执行while(i>=0)A[p--]=A[i--]
但是如果A有剩余必然有p==i(出现剩余的情况,只有可能一个出现剩余,不可能出现AB数组都剩余的情况)
(如果出现AB都剩余,就跟第一个for循环矛盾了)
既然对于指针p==i,那么此时这个while循环就会显得很多余
*/
;
以上是关于C++每日一练8.合并两个有序的数组的主要内容,如果未能解决你的问题,请参考以下文章