數據結構 P20 算法實現 —A=AUB和歸併排序

/*  例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;
}

發佈了34 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章