数据结构 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;
}
#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;
}
相关文章推荐
- [置顶] 【scala 数据结构和算法】Scala实现:归并排序
- 数据结构 p25-26 算法实现 线性表的查找与归并排序2
- Python实现各类数据结构和算法----归并排序
- 【算法和数据结构】排序(四)归并排序和快速排序(C++实现)
- 归并排序(迭代实现)- 数据结构和算法95
- 归并排序(递归实现)- 数据结构和算法94
- 一步步学习数据结构和算法之归并排序效率分析及java实现
- 《数据结构与算法——C语言实现》学习笔记——归并排序
- 很全面的算法和数据结构知识(含代码实现)
- 用链表实现“啦啦啦”等算法或数据结构(持续更新)
- 数据结构与算法——有向无环图的拓扑排序C++实现
- 算法与数据结构 其二 数组和链表 的实现
- CI1.1 实现一个算法,确定一个字符串的所有字符是否全部不同。假使不允许使用额外的数据结构。
- c++11通过变参模板实现特殊的数据结构和算法
- 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的
- 算法与数据结构 其四 循环队列的实现
- 算法和数据结构~各位排序算法的介绍与实现(C#)
- 数据结构和算法分析java--优先队列(堆实现)
- 数据结构各种算法实现(C++模板)
- 利用手摇算法实现原地归并排序