fork download
  1. #include <stdio.h>
  2. int *find(int *begin, int *end, int value)
  3. {
  4. int *p = begin;
  5. for ( ; p != end; ++p)
  6. if (*p == value) break;
  7. return p;
  8. }
  9. #define no_items 10
  10. int main(void) {
  11. int i, j, k;
  12. int parent1[no_items] = {8,3,6,9,7,4,5,10,1,2};
  13. int parent2[no_items] = {10,3,2,9,4,7,5,8,6,1};
  14. int output1[no_items] = {0};
  15. int output2[no_items] = {0};
  16. int crosspoint = 3;
  17. memcpy(output1, parent1, crosspoint * sizeof(int));
  18. for (i = crosspoint, j = 0; i < no_items; ++i)
  19. {
  20. while (find(output1, output1+i, parent2[j]) != output1+i) ++j;
  21. output1[i] = parent2[j];
  22. }
  23. memcpy(output2, parent2, crosspoint * sizeof(int));
  24. for (i = crosspoint, j = 0; i < no_items; ++i)
  25. {
  26. while (find(output2, output2+i, parent1[j]) != output2+i) ++j;
  27. output2[i] = parent1[j];
  28. }
  29. memcpy(parent1, output1, sizeof(parent1));
  30. memcpy(parent2, output2, sizeof(parent2));
  31. printf("parent1:");
  32. for (i = 0; i < no_items; ++i) {
  33. printf("%d, ", parent1[i]);
  34. }
  35. printf("\nparent2:");
  36. for (i = 0; i < no_items; ++i) {
  37. printf("%d, ", parent2[i]);
  38. }
  39. putchar('\n');
  40.  
  41. return 0;
  42. }
  43.  
Success #stdin #stdout 0s 2292KB
stdin
Standard input is empty
stdout
parent1:8, 3, 6, 10, 2, 9, 4, 7, 5, 1, 
parent2:10, 3, 2, 8, 6, 9, 7, 4, 5, 1,