不含有重复元素的交集数组
int fun(int A[ ], int m, int B[ ], int n, int C[ ])
{int i,j,k;int sum=0;//嵌套循环;比较两个数组的相同元素for(i=0;i<m;i++){for(j=0;j<n;j++){if(A[i]==B[j])//如果有相同的元素{for(k=0;k<sum;k++){if(C[k]==B[j]) //查找是否是目标数组的重复元素break; //数组长度是变量K<sum}if(k>=sum)//不是,则将目标数组增长{C[sum]=B[j];sum++;}}}}return sum ;//返回sum
}
//在实际程序运行的过程中,k>sum不可能存在,因为k=sum时不进入循环
//k=sum的时候会存在,此时再逻辑上表示遍历数组C没有找到重复的元素
//所以将k>sum换成k==sum也会成立//sum++
//新添加的元素总是被放置在C数组的当前已使用部分的末尾的下一个位置。/*
1.数组与指针:
在 C 语言中,数组名可以作为指针使用,指向数组的首元素。函数通过数组名 A、B 和 C 来访问和操作这些数组。
需要注意数组越界的问题。在这个函数中,数组 C 的大小应该足够大,以容纳所有可能的相同元素。否则,可能会导致内存访问错误。
2.嵌套循环:
函数使用了三层嵌套循环来遍历数组 A 和 B,并检查它们的元素是否相同。外层循环遍历 A,中间层循环遍历 B,内层循环则用于检查 C 中是否已经包含了当前找到的相同元素。
嵌套循环的效率可能较低,特别是当数组 A 和 B 很大时。在实际应用中,可能需要考虑优化算法以提高效率。
3.条件判断:
使用 if 语句来检查 A[i] 是否等于 B[j],以及 C[k] 是否已经包含了相同的元素。
在内层循环中,如果找到了相同的元素,则使用 break 语句跳出循环,避免不必要的比较。
4.数组元素的赋值与增长:
当找到一个新的相同元素(即不在 C 中的元素)时,将其赋值给 C[sum],然后递增 sum 以更新 C 的长度。
需要注意的是,在赋值时应该使用正确的语法,原代码中的 C[sum]=B[j]; 末尾的分号是中文分号,应该改为英文分号 ;。
5.返回值:
函数最终返回 sum,即数组 C 中相同元素的个数。
6.边界条件与错误处理:
函数没有显式地处理一些边界条件和错误情况,比如数组 A、B 或 C 为空的情况,或者数组 C 的大小不足以容纳所有相同元素的情况。
在实际应用中,应该增加适当的错误处理逻辑来确保函数的健壮性和可靠性。
7.效率考虑:
如前所述,嵌套循环的效率可能较低。在实际应用中,可以考虑使用哈希表或集合等数据结构来提高查找效率,避免使用三层嵌套循环。
。
*/
sum指代的是下一个添加位置的索引,对应的是第n+1个位置。