diff --git a/numbers.c b/numbers.c index 694c6e7..7eac651 100644 --- a/numbers.c +++ b/numbers.c @@ -24,7 +24,7 @@ CompareFctType compareFct(const void *arg1, const void *arg2) // Returns len random numbers between 1 and 2x len in random order which are all different, except for two entries. // Returns NULL on errors. Use your implementation of the binary search tree to check for possible duplicates while // creating random numbers. -unsigned int* createNumbers(unsigned int len) +unsigned int *createNumbers(unsigned int len) { srand(time(NULL)); @@ -32,7 +32,7 @@ unsigned int* createNumbers(unsigned int len) int isDuplicate = 0; unsigned int number = rand() % (2 * len) + 1; - unsigned int* array = malloc(len*sizeof(int)); + unsigned int *array = malloc(len * sizeof(int)); numbers = addToTree(NULL, &number, sizeof(int), compareFct, &isDuplicate); array[0] = number; @@ -44,7 +44,9 @@ unsigned int* createNumbers(unsigned int len) { isDuplicate = 0; i--; - }else{ + } + else + { array[i] = number; } } @@ -54,7 +56,8 @@ unsigned int* createNumbers(unsigned int len) int duplicatePosition1 = rand() % len; int duplicatePosition2 = rand() % len; - while(duplicatePosition2 == duplicatePosition1){ + while (duplicatePosition2 == duplicatePosition1) + { duplicatePosition2 = rand() % len; } @@ -66,11 +69,19 @@ unsigned int* createNumbers(unsigned int len) // Returns only the only number in numbers which is present twice. Returns zero on errors. unsigned int getDuplicate(const unsigned int numbers[], unsigned int len) { - qsort(numbers, len, sizeof(int), compareFct); + unsigned int *copyNumbers = malloc(sizeof(int) * len); + for (int i = 0; i < len; i++) + { + copyNumbers[i] = numbers [i]; + } - for(int i = 0; i < len-1; i++){ - if(numbers[i] == numbers[i+1]){ - return numbers[i]; + qsort(copyNumbers, len, sizeof(int), compareFct); + + for (int i = 0; i < len - 1; i++) + { + if (copyNumbers[i] == copyNumbers[i + 1]) + { + return copyNumbers[i]; } }