Advertisement
madegoff

8ex

Jan 12th, 2024
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. ArrayWithLength combine(ArrayWithLength arr1, ArrayWithLength arr2) {
  2.  
  3. ArrayWithLength ret;
  4. ret.arr = (uint16_t *) malloc(sizeof(uint16_t) * 0);
  5. ret.len = 0;
  6.  
  7. int len1 = arr1.len;
  8. int len2 = arr2.len;
  9.  
  10. /*if(len1 == 0){ //das erste array leer
  11. if(len2 != 0) ret = base_case(arr2); //beide arrays leer
  12. return ret; //in beiden faellen (unabhaebgig von der erfuelung der if bedingung) ist ret schon fertig geschrieben und muss zurueckgegeben werden
  13. }
  14. else if(len2 == 0){ //das zweite array leer
  15. if(len1 != 0) ret = base_case(arr1);
  16. return ret;
  17. }
  18. */
  19.  
  20. ret.arr = (uint16_t *) realloc(ret.arr,sizeof(uint16_t) * (len1+len2));
  21. ret.len = len1+len2;
  22.  
  23. //printf("array1[0] = %u\n", arr1.arr[0]);
  24.  
  25. //indizen fuer jeweiliges array
  26. size_t arr1_count = 0;
  27. size_t arr2_count = 0;
  28.  
  29. size_t i=0; //anstatt eine for schleife zu machen, den index fuer rueckgabe array in der while schleife erhoehen
  30.  
  31. while(arr1_count < len1 && arr2_count < len2){
  32. if(arr1.arr[arr1_count]>arr2.arr[arr2_count]){ //groessere zahl einfuegen
  33. ret.arr[i] = arr1.arr[arr1_count];
  34. arr1_count++;
  35. }
  36. else{
  37. ret.arr[i] = arr2.arr[arr2_count];
  38. arr2_count++;
  39. }
  40. i++;
  41. }
  42.  
  43. while(arr1_count < len1){
  44. ret.arr[i] = arr1.arr[arr1_count];
  45. i++;
  46. arr1_count++;
  47. }
  48. while(arr2_count < len2){
  49. ret.arr[i] = arr2.arr[arr2_count];
  50. i++;
  51. arr2_count++;
  52. }
  53.  
  54. return ret;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement