Fusionner deux tableaux int d’un tableau sans duplication

J’essaie de fusionner deux tableaux en un sans duplication, mais mon code ne fonctionne pas correctement. Quelqu’un peut-il suggérer comment résoudre ce problème?

void unify(int set_A[], int size_A, int set_B[], int size_B, int set_C[], int size_C) { int i,j,count=0,indx=size_A; for(i=0;i<size_A;i++) { set_C[i]=set_A[i]; } for(i=0;i<size_B;i++) { for(j=0;j<size_A;j++) { if (set_B[i]!=set_C[j]) count++; } if (count==size_A){ set_C[indx]=set_B[i]; indx++; } } } 

Exemple:

 a{3 7 13 8 11 1 4} b{5 7 1 2 3} a_b{3 7 13 8 11 1 4 5 0 0 0 0 0..} 

Pourrait probablement être optimisé, ou du moins rendu joli:

 void unify(int set_A[], int size_A, int set_B[], int size_B, int set_C[], int size_C) { int indexC, indexTemp; for(indexC = 0; indexC < size_A; indexC++) set_C[indexC] = set_A[indexC]; for(int indexB = 0; indexB < size_B; indexB++) { for(indexTemp = 0; indexTemp < indexC; indexTemp++) { if(set_B[indexB] == set_C[indexTemp]) break; } if(indexTemp == indexC) set_C[indexC++] = set_B[indexB]; } } 

Quelque chose comme ça:

 void unify(int set_A[], int size_A, int set_B[], int size_B, int set_C[], int size_C) { int counterC = 0; for (int i = 0; i < size_A && counterC < size_C; i++) { int discard = 0; for (int j = 0; j < i; j++) { if (set_A[j] == set_A[i]) { discard = 1; break; } } if (discard) continue; set_C[counterC++] = set_A[i]; } for (int i = 0; i < size_B && counterC < size_C; i++) { int discard = 0; for (int j = 0; j < i; j++) { if (set_B[j] == set_B[i]) { discard = 1; break; } } if (discard) continue; for (int j = 0; j < counterC; j++) { if (set_C[j] == set_B[i]) { discard = 1; break; } } if (discard) continue; set_C[counterC++] = set_B[i]; } } 

J’ai dû append une petite correction à votre code pour que cela fonctionne (non testé). Faites attention aux commentaires.

 void unify(int set_A[], int size_A, int set_B[], int size_B, int set_C[]) { int i, j, indx = size_A; // Add the value from A to C for(i = 0; i < size_A; i++) { set_C[i] = set_A[i]; } // Iterate the values of B for(i = 0; i < size_B; i++) { int count = 0; // Find if A contains B[i] for(j = 0; j < size_A; j++) { if (set_A[j] != set_B[i]) ++count; } // If A doesn't contain B[i], add B[i] to C and increase indx if (count == size_A) { set_C[indx] = set_B[i]; ++indx; } } } 

Bien que je voudrais remplacer la première boucle nestede par une fonction pour me dire si un tableau contient une valeur, comme ceci:

 int contains(int arr[], int size, int val) { int i; for(i = 0; i < size; i++) { if (arr[i] == val) return 0; } return 1; }