比如A,B的异集是A+B- (A和B的交集)
A={1,2,3}, B={1,4,5} A和B的异集是{2,3,4,5}
#include <iostream>
using namespace std;
#define size 20
#define len1 3
#define len2 4
//此方法复杂是(len1*len2)
void fun(){
int arr1[]={1,2,3};
bool b1[len1];//标志对应位是否在别的结合中,true表示不在别的集合中
for(int i=0;i<len1;i++)
b1[i]=true;
int arr2[]={1,4,5,6};
bool b2[len2];//标志对应位是否在别的结合中,true表示不在别的集合中
for(i=0;i<len2;i++)
b2[i]=true;
int com[size];
int count = 0;
for(i=0;i<len1;i++){
for(int j=0;j<len2;j++){
if(arr1[i]==arr2[j]){
b1[i]=false;
b2[j]=false;
break;
}
}
}
for(i=0;i<len1;i++)
if(b1[i])
com[count++] = arr1[i];
for(int j=0;j<len2;j++)
if(b2[j])
com[count++] = arr2[j];
for(i=0;i<count;i++)
cout<<com[i]<<" ";
cout<<endl;
}
int main(){
fun();
return 0;
}
方法2 就是将一个比较多的数组进行快速排序,然后从另外一个数组中每次挑选一个,和排好序的数组进行二分查找。
#include <iostream>
using namespace std;
#define size 20
#define len1 3
#define len2 4
//二叉树查找法
int find(int arr[],int begin,int end,int data){
while(begin<end-1){
int mid = (begin+end)/2;
if(arr[mid]<=data){
begin = mid;
}else{
end = mid;
}
}
if(arr[end]==data)
return end;
if(arr[begin]==data)
return begin;
return -1000;
}
void quicksort(int arr[],int front,int back){
int f = front,b = back;
if(front<back){
int temp = arr[front];
while(front<back){
while(arr[back]>temp&&front<back){
back--;
}
arr[front]=arr[back];
while(arr[front]<temp&front<back){
front++;
}
arr[back]=arr[front];
}
arr[front]=temp;
quicksort(arr,f,front-1);
quicksort(arr,front+1,back);
}
}
//此方法复杂是(len1*log(len2))
void fun(){
int arr1[]={1,2,3};
bool b1[len1];//标志对应位是否在别的结合中,true表示不在别的集合中
for(int i=0;i<len1;i++)
b1[i]=true;
int arr2[]={5,4,6,1};
quicksort(arr2,0,3);
for(i=0;i<len2;i++)
cout<<arr2[i]<<" ";
cout<<endl;
bool b2[len2];//标志对应位是否在别的结合中,true表示不在别的集合中
for(i=0;i<len2;i++)
b2[i]=true;
int com[size];
int count = 0;
int pos;
for(i=0;i<len1;i++){
if((pos=find(arr2,0,len2-1,arr1[i]))!=-1000){
b1[i]=false;
b2[pos]=false;
}
}
for(i=0;i<len1;i++)
if(b1[i])
com[count++] = arr1[i];
for(int j=0;j<len2;j++)
if(b2[j])
com[count++] = arr2[j];
for(i=0;i<count;i++)
cout<<com[i]<<" ";
cout<<endl;
}
int main(){
fun();
return 0;
}