这是自己写的作业,算法小菜鸟。
欢迎讨论。
//快速排序划分
//找到划分
int Partition(int a[],int l,int r)
{
int key=a[l],t=0;
int i=l,j=r;
while(i<j)
{
while(i<j && a[j]>=key)
{
j--;
}
while(i<j && a[i]<=key)
{
i++;
}
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[l]=a[i];
a[i]=key;
return i;
}
//递归排序
void sort(int a[],int low,int high)
{
if(low<high)
{
int s=Partition(a,low,high);
sort(a,low,s-1);//左边
sort(a,s+1,high);//右边
}
}
//二分法查找
//非递归折半查找
int BinarySerch(int a[],int l,int r,int k)//找到返回下标,未找到返回-1
{
int m=0;
while(l<=r)
{
m=(l+r)/2;
if(k==a[m])
{
return m;
}
else if(k<a[m])
{
r=m-1;
}
else
{
l=m+1;
}
}
return -1;
}
int main()
{
int a[10],b[5],s[10]={0},x1=0,same[10]={0},y=0,x2=0;
printf("请输入数组A,有10个元素\n");
for(int i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("请输入数组B,有5个元素\n");
for(int i=0;i<5;i++)
{
scanf("%d",&b[i]);
}
//对B进行排序
sort(b,0,4);
//在A中查找是否有与B相同的元素,即遍历A,如果没有就放入数组S
for(int i=0;i<10;i++)
{
if(BinarySerch(b,0,4,a[i])==-1)//找到了A特有的元素
{
s[x1]=a[i];
x1++;//a的特有元素有X1个
}
else
{
same[y]=a[i];//sanme数组内是ab共有的元素
y++;
}
}
//现在已经找到A特有的和AB共有的所有元素
//在AB共有的元素中找到B特有的元素并放入S中
//对same进行排序
sort(same,0,y-1);
for(int i=0;i<5;i++)
{
if(BinarySerch(same,0,4,b[i])==-1)//b特有的
{
s[x1]=b[i];
x1++;
x2++;//b的特有元素有x2个
}
}
printf("最终结果:");
for(int i=0;i<x1;i++)
{
printf("%d ",s[i]);
}
}
运行结果