/* 例2-1:A=AUB */
#include<iostream>
#define ASIZE 5 //宏定義A集合的元素個數#define BSIZE 6 //宏定義B集合的元素個數
using namespace std;
int main()
{
int m=0,n=0;
char A[ASIZE+BSIZE]={'a','s','1','2','q'},B[BSIZE]={'s','2','x','c','5','Y'};//A集合和B集合的元素
for(int i=0;i<BSIZE;++i)
{
for(int j=0;j<ASIZE+n;++j) //B集合的元素依次與A集合的元素比較
{
if(B[i]!=A[j]) //若不同則係數m加一
++m;
if(m==ASIZE+n) //若與A集合所有的元素都不相同則將B集合中的該元素添加到A集合
{
A[ASIZE+n]=B[i];
++n;
}
}
m=0;
}
for(i=0;i<ASIZE+n;++i)
cout<<"A"<<"["<<i<<"]"<<A[i]<<endl;
cout<<"B集合和A集合不同的元素個數爲:"<<n<<endl;
return 0;
}
/*例2-2:歸併排序*/
#include<iostream>
#define ASIZE 4 //宏定義A的元素個數
#define BSIZE 7 //宏定義B的元素個數
#define CSIZE ASIZE+BSIZE //宏定義C的元素個數爲A和B的元素個數的總和
using namespace std;
int main()
{
int *p1,*p2,i=0,j=0,k=0; //定義指針及參數
int A[ASIZE]={3,5,8,11},B[BSIZE]={2,6,8,9,11,15,20};
int C[CSIZE]={0}; //初始化C數組
while(i!=ASIZE&&j!=BSIZE) //當有一個數組內的值提取完時循環終止
{
p1=&A[i];
p2=&B[j];
if(*p1<=*p2) //若A[i]小於或等於B[j] 則將A[i]賦予C[k] 並將指針後移一位 C[k]的位置也後移一位
{
C[k]=*p1;
++i;
}
else //若A[i]大於B[j] 則將B[j]賦予C[k] 並將指針後移一位 C[k]的位置也後移一位
{
C[k]=*p2;
++j;
}
++k;
}
if(i==ASIZE) //讓A先提取完 將B中剩餘的元素依次放入C
for(;j<BSIZE;++j)
{
p2=&B[j];
C[k]=*p2;
++k;
}
else //若B先提取完 將A中剩餘的元素依次放入C
for(;i<ASIZE;++i)
{
p1=&A[i];
C[k]=*p1;
++i;
++k;
}
for(i=0;i<CSIZE;++i)
cout<<"C"<<"["<<i<<"]= "<<C[i]<<endl;
return 0;
}