#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void increaseArraySize(int *arr, int *size);
void binaryAddition(int *arr, int size, int value, int startIndex, int endIndex);
void addToArray(int *arr, int *size, int value);
int main() {
int size = 0;
int *array = (int *)calloc(size, sizeof(int));
// random sayilar uretip diziye ekliyorum
srand(time(NULL));
for(int i = 0; i < 100; i++) {
addToArray(array, &size, rand()%100);
printf("%d.%d\n", array[i], i); // kac adim oldugunu takip amacli yazdiriyorum
}
// normalde random yerine bunlar olacak
/*addToArray(array, &size, 1);
addToArray(array, &size, 5);
addToArray(array, &size, 7);
addToArray(array, &size, 2);
addToArray(array, &size, 1);
addToArray(array, &size, 10);
addToArray(array, &size, 6);
addToArray(array, &size, -6);
addToArray(array, &size, 68);
addToArray(array, &size, -56);
addToArray(array, &size, -1);
addToArray(array, &size, 55);
addToArray(array, &size, 74);
addToArray(array, &size, 12);
addToArray(array, &size, 51);
addToArray(array, &size, -10);
addToArray(array, &size, 68);
addToArray(array, &size, -64);
addToArray(array, &size, 678);
addToArray(array, &size, -16);*/
// dizideki elemanlari yazdiriyorum ancak bastakilerle eslesmiyor
for(int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
scanf("%d", &size); // ekran kapanmasin diye koydum bunu
}
void increaseArraySize(int *arr, int *size) {
int newSize = (*size) + 1;
if((*size) == 0) {
arr = (int *)calloc(newSize, sizeof(int));
*size = newSize;
} else {
arr = (int *)realloc(arr, newSize * sizeof(int));
arr[*size] = 0;
*size = newSize;
}
}
void binaryAddition(int *arr, int size, int value, int startIndex, int endIndex) {
int middleIndex = (startIndex + endIndex) / 2;
if(startIndex == endIndex) {
if(value < arr[middleIndex]) {
int tmp1 = value;
int tmp2 = value;
for(int i = startIndex; i <= size; i++) {
tmp2 = arr[i];
arr[i] = tmp1;
tmp1 = tmp2;
}
} else {
int tmp1 = value;
int tmp2 = value;
for(int i = middleIndex+1; i <= size; i++) {
tmp2 = arr[i];
arr[i] = tmp1;
tmp1 = tmp2;
}
}
} else if (value < arr[middleIndex]) {
binaryAddition(arr, size, value, 0, middleIndex-1);
} else {
binaryAddition(arr, size, value, middleIndex+1, endIndex);
}
}
void addToArray(int *arr, int *size, int value) {
increaseArraySize(arr, size);
if((*size) == 1) {
arr[0] = value;
} else {
int oldSize = (*size) - 1;
binaryAddition(arr, oldSize, value, 0, oldSize-1);
}
}