arr1[] ={11, 22, 33, 44, 55}; arr2[] ={23, 11, 64, 55, 98};
都具有相同的元素{11, 55}
,那么如何将arr2
中的元素添加到arr1
呢?arr2
中的第一个元素arr2[0]=23
和arr1
中的arr[i++]
所有元素进行遍历比较。如果有相同的元素就break
,这样可以减少循环步骤;如果没有相同的元素,则将这个元素加到arr1
中。#include"stdio.h"
//输出
int print(int arr[], int arrayLength){
for(int i = 0; i < arrayLength; i++){
printf("%d ", arr[i]);
}
printf("\n");
}
//并集
int unions(int *p1, int *p2){
int unions[10] = {0}, index = 5;
for(int m=0; m<5; m++){
*(unions+m)=*(p1+m);
}
int arrFlag=5;
for(int i=0;i<5;i++){
int flag=0;
for(int j=0;j<10;j++){
if(*(unions+j) != *(p2+i) && *(unions+j)!=0){
++flag;
}
}
if(flag==arrFlag){
++arrFlag;
*(unions+index++) = *(p2+i);
}
}
printf("集合的并集是:");
print(unions,10);
}
int main(){
int arr1[] ={11, 22, 33, 44, 55};
int arr2[] ={23, 11, 64, 55, 98};
int arrayLength = sizeof(arr1)/4;
printf("原集合:");
print(arr1,arrayLength);
print(arr2,arrayLength);
unions(arr1,arr2);
}
arr2
中的所有元素要和数组arr1
的所有元素进行比较,这样时间复杂度为O(n*m),n为arr1
元素的个数,m为arr2
元素的个数。如果有100个数据,则要进行10000次比较,所以是十分浪费时间的。arr1
中的所有元素进行排序,用arr2
中的元素在数组arr1
中的所有元素进行二分查找(时间复杂度:O(log2n)),这样可以大大减少执行步骤。原文:https://www.cnblogs.com/MrFlySand/p/14128406.html