Advertisement
Guest User

Untitled

a guest
Mar 18th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. void unionInSet(Set* self, const Set* other) {
  2. if(self->len == 0){
  3. assignSet(self,other);
  4. return;
  5. }
  6. if(other->len == 0){
  7. return;
  8. }
  9. Set temp;
  10. createEmptySet(&temp);
  11. int i=0;
  12. int j=0;
  13. int duplicates=0;
  14. while (i < self->len && j < other->len)
  15. {
  16. if (self->elements[i] < other->elements[j])
  17. i++;
  18. else if (other->elements[j] < self->elements[i])
  19. j++;
  20. else /* if arr1[i] == arr2[j] */
  21. {
  22. duplicates++;
  23. i++;
  24. j++;
  25. }
  26. }
  27. int lenCount= self->len+other->len-duplicates;
  28. temp.elements= (int*) malloc(sizeof(int)*lenCount);
  29. temp.len=lenCount;
  30. int x=0;
  31. int y=0;
  32. int k=0;
  33. while((x < self->len) && (j< other->len)){
  34. if(self->elements[x] < other->elements[y]){
  35. temp.elements[k]=self->elements[x];
  36. x++;
  37. k++;
  38. }
  39. else if(self->elements[x] > other->elements[y])
  40. {
  41. temp.elements[k]=other->elements[y];
  42. y++;
  43. k++;
  44. }
  45. else{
  46. temp.elements[k]=self->elements[x];
  47. x++;
  48. k++;
  49. y++;
  50. }
  51. }
  52. while(x<self->len){
  53. temp.elements[k]=self->elements[x];
  54. x++;
  55. k++;
  56. }
  57. while(y<other->len){
  58. temp.elements[k]=other->elements[y];
  59. y++;
  60. k++;
  61. }
  62. assignSet(self,&temp);
  63. free(temp.elements);
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement