Compare commits

..

No commits in common. "main" and "numbers_dev" have entirely different histories.

View File

@ -25,43 +25,42 @@ int compareUInts(const void *arg1, const void *arg2){
return 0;
}
unsigned int* createNumbers(unsigned int len)
{
if(len == 0){
return NULL; //Check if len ist 0o
return NULL;
}
unsigned int* numbers = (unsigned int*)malloc(len * sizeof(unsigned int)); //Allocate Memory for numbers Array
unsigned int* numbers = (unsigned int*)malloc(len * sizeof(unsigned int));
if(numbers == NULL){
return NULL; //Fallback if memory allocation error
return NULL;
}
TreeNode *tree = NULL;
unsigned int i = 0;
while(i < len){
unsigned int tmp = (rand() % (2*len)) + 1; //Generate Random value
unsigned int tmp = (rand() % (2*len)) + 1;
int isDuplicate = 0;
tree = addToTree(tree, &tmp, sizeof(unsigned int), compareUInts, &isDuplicate); //Add random value to tree
tree = addToTree(tree, &tmp, sizeof(unsigned int), compareUInts, &isDuplicate);
if(!isDuplicate){
numbers[i] = tmp; //Add number to array if no duplicate
numbers[i] = tmp;
i++;
}
}
clearTree(tree); //Free Memory
clearTree(tree);
unsigned int rIdx = rand() % len; //Select duplicate number
unsigned int duplicate = numbers[rIdx];
unsigned int rIdx = rand() % len;
unsigned int duplicate = numbers[rIdx];
unsigned int tIdx = rand() % len;
while(tIdx == rIdx){
tIdx = rand() % len; //Select target index
tIdx = rand() % len;
}
numbers[tIdx] = duplicate;
numbers[tIdx] = duplicate;
return numbers;
}
@ -70,27 +69,24 @@ unsigned int* createNumbers(unsigned int len)
unsigned int getDuplicate(const unsigned int numbers[], unsigned int len)
{
if(numbers == NULL || len < 2){
return 0; //Fallback
return 0;
}
unsigned int* sorted = (unsigned int*)malloc(len * sizeof(unsigned int)); //Allocate Memory for sorted array
unsigned int* sorted = (unsigned int*)malloc(len * sizeof(unsigned int));
if(sorted == NULL){
return 0; //Fallback if memory allocation error
return 0;
}
//Create tree for duplicate search
TreeNode *tree = NULL;
for(unsigned int i = 0; i < len; i++){
tree = addToTree(tree, &numbers[i], sizeof(unsigned int), compareUInts, NULL);
tree = addToTree(tree, &numbers[i], sizeof(unsigned int), compareUInts, NULL);
}
//Write sorted Elements from Tree to arary
sorted[0] = *(unsigned int *)nextTreeData(tree);
for(unsigned int j = 1; j < len; j++){
sorted[j] = *(unsigned int*)nextTreeData(NULL);
}
//Get duplicate
for(unsigned int j = 1; j < len; j++){
sorted[j] = *(unsigned int*)nextTreeData(NULL);
}
unsigned int duplicate = 0;
for(unsigned int k = 0; k < len - 1; k++){
if(sorted[k] == sorted[k+1]){
@ -98,10 +94,6 @@ unsigned int getDuplicate(const unsigned int numbers[], unsigned int len)
break;
}
}
//Free memory
clearTree(tree);
free(sorted);
return duplicate;
}