描述
| |
知识点 | 排序,数组 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入说明,按下列顺序输入: |
输出 | 输出合并之后的数组 |
样例输入 | 31 2 54-1 0 3 2 |
样例输出 | -101235 |
#include <iostream>
using namespace std;
void CombineBySort(int* pArray1, int iArray1Num, int* pArray2, int iArray2Num, int* pOutputArray, int* iOutputNum);
int main()
{
int n, m;
int i, j;
//int a[100],b[100],c[200];
//int *num;
cin >> n;
int *a = new int[n];
for(i=0; i<n; i++)
{
cin >> a[i];
}
cin >> m;
int *b = new int[m];
for(j=0; j<m; j++)
{
cin >> b[j];
}
//for(i=0; i<m; i++)
// cout << b[i];
int *c = new int[n+m];
int *num = new int;
CombineBySort(a, n, b, m, c, num);//调用函数
for(i=0; i<*num; i++)
cout << c[i];
cout << '\n';
return 0;
}
void CombineBySort(int* pArray1, int iArray1Num, int* pArray2, int iArray2Num, int* pOutputArray, int* iOutputNum)
{
int i, j, k;
int temp;
int fOut;
for(i=0; i<iArray1Num; i++)//对第一个数组排序
{
for(j=0; j< iArray1Num-1-i; j++)
{
if(pArray1[j] > pArray1[j+1])
{
temp = pArray1[j];
pArray1[j] = pArray1[j+1];
pArray1[j+1] = temp;
}
}
}
/*
for(i=0; i< iArray1Num; i++)
{
cout << pArray1[i];
}
cout << endl;
*/
for(i=0; i<iArray2Num; i++)//对第二个数组排序
{
for(j=0; j< iArray2Num-1-i; j++)
{
if(pArray2[j] > pArray2[j+1])
{
temp = pArray2[j];
pArray2[j] = pArray2[j+1];
pArray2[j+1] = temp;
}
}
}
/*
for(i=0; i< iArray2Num; i++)
{
cout << pArray2[i];
}
cout << endl;
*/
for(i=0,j=0,k=0; i+j < iArray1Num+iArray2Num-1; )//合并
{
if(pArray1[i] == fOut)//如果当前数值与前一个已确定输出值相同,则跳过
{
i++;
//continue;
}
else if(pArray2[j] == fOut)//如果当前数值与前一个已确定输出值相同,则跳过
{
j++;
//continue;
}
else//
{
if(pArray1[i] < pArray2[j])//如果第一个数组的值比第二个数组的值小
{
pOutputArray[k++] = pArray1[i];//则把第一个数组的值放入输出数组,并序号加一
i++;
}
else if(pArray1[i] > pArray2[j] )
{
pOutputArray[k++] = pArray2[j];
j++;
}
else if(pArray1[i] == pArray2[j])
{
pOutputArray[k++] = pArray2[j];
i++;
j++;
}
fOut = pOutputArray[k-1];//更新 前一个输出值fOut
}
if(i == iArray1Num)//如果第一个数组都已经遍历完毕
{
for(j; j< iArray2Num; j++)//则把第二个数组的剩余的数字放入输出输入
{
if(pArray2[j] == fOut)//判断是否有重值
{
j++;
continue;
}
else
{
pOutputArray[k++] = pArray2[j];
fOut = pOutputArray[k-1];
}
}
break;
}
else if(j == iArray2Num)//同理,如果第二个数组都已经遍历完毕
{
for(i; i< iArray1Num; i++)
{
if(pArray1[i] == fOut)
{
i++;
continue;
}
else
{
pOutputArray[k++] = pArray1[i];
fOut = pOutputArray[k-1];
}
}
break;
}
}
*iOutputNum = k;//输出数组的大小
}