您的位置:首页 > 理论基础 > 数据结构算法

数据结构 P20 算法实现 —A=AUB和归并排序

2017-09-19 20:31 369 查看
/*  例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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐