目录
交集
-
函数
int intersection(int a[], int len1, int b[], int len2, int c[]){ quick_sort(a, 0, len1 - 1); // 首先快速排序 quick_sort(b, 0, len2 - 1); int i = 0, j = 0, k = 0; // 分别为a b c数组的索引 while(i < len1 && j < len2){ if(a[i] == b[j]){ /*if(k > 0 && c[k - 1] == a[i]){ // 若和前一个元素重复 i++; j++; continue; }*/ c[k] = a[i]; i++; j++; k++; } else if(a[i] < b[j]) i++; else j++; } return k; // 即为c数组长度 }
-
主函数调用
//int a[11] = {1, 2, 3, 4, 9, 9, 10, 8, 5, 6, 7}; //int b[5] = {11, 3, 9, 9, 5}; // 实则不是集合(为普通数组),集合中元素应该不同 int a[11] = {1, 2, 3, 4, 9, 21, 10, 8, 5, 6, 7}; int b[5] = {11, 3, 9, 10, 5}; int c[5]; int lenc = intersection(a, 11, b, 5, c);
并集
-
函数
int Union(int a[], int len1, int b[], int len2, int c[]){ quick_sort(a, 0, len1 - 1); quick_sort(b, 0, len2 - 1); int i = 0, j = 0, k = 0; // 分别为a b c数组的索引 while(i < len1 && j < len2){ if(a[i] == b[j]) c[k++] = a[i++] = b[j++]; else if(a[i] < b[j]) c[k++] = a[i++]; else c[k++] = b[j++]; } while(i < len1) c[k++] = a[i++]; while(j < len2) c[k++] = b[j++]; return k; // 即为c数组长度 }
-
主函数调用
int a[11] = {1, 2, 3, 4, 9, 21, 10, 8, 5, 6, 7}; int b[5] = {11, 3, 9, 10, 5}; int c[16]; int lenc = Union(a, 11, b, 5, c);
差集
-
函数
int DifferenceSet(int a[], int len1, int b[], int len2, int c[]){ quick_sort(a, 0, len1 - 1); quick_sort(b, 0, len2 - 1); int i = 0, j = 0, k = 0; while(i < len1 && j < len2){ if(a[i] == b[j]){ i++;j++; } else if(a[i] < b[j]) c[k++] = a[i++]; else j++; } while(i < len1) c[k++] = a[i++]; return k; }
-
主函数调用
int a[11] = {1, 2, 3, 4, 9, 21, 10, 8, 5, 6, 7}; int b[5] = {11, 3, 9, 10, 5}; int c[11]; int lenc = DifferenceSet(a, 11, b, 5, c);