#include <stdio.h>
typedef struct Array {
int* data;
int length;
int capacity;
} Array;
void print_array(Array arr, const char* msg) {
printf(msg);
for (int i = 0; i < arr.length; i++) {
printf("%d ", arr.data[i]);
}
printf("\n");
}
int random(int min, int max) {
return rand() % max + min;
}
void swap(int* left, int* right) {
int tmp = *left;
*left = *right;
*right = tmp;
}
Array mk_random_array() {
Array result;
result.capacity = random(1, 5);
result.length = result.capacity;
result.data = (int*)malloc(sizeof(int) * result.capacity);
for (int i = 0; i < result.capacity; i++) {
result.data[i] = random(0, 9);
}
return result;
}
Array array_concat(Array left, Array right) {
Array result;
result.capacity = left.length + right.length;
result.length = result.capacity;
result.data = (int*)malloc(sizeof(int) * result.capacity);
memcpy(result.data, left.data, sizeof(int) * left.length);
memcpy(result.data + left.length, right.data, sizeof(int) * right.length);
return result;
}
void array_sort(Array arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr.data[j] > arr.data[j + 1]) {
swap(&arr.data[j], &arr.data[j + 1]);
}
}
}
}
Array array_distinct(Array arr) {
for (int j = 0; j < arr.length - 1;) {
if (arr.data[j] == arr.data[j+1]) {
for(int i = j+1; i < arr.length; ++i) {
arr.data[i-1] = arr.data[i];
}
arr.length--;
}
else ++j;
}
return arr;
}
int main() {
srand(time(NULL));
Array a = mk_random_array();
print_array(a, "Первый массив:\t");
Array b = mk_random_array();
print_array(b, "Второй массив:\t");
Array c = array_concat(a, b);
print_array(c, "Результат объединения:\t");
array_sort(c);
print_array(c, "После сортировки:\t");
c = array_distinct(c);
print_array(c, "Убраны дубликаты:\t");
free(a.data);
free(b.data);
free(c.data);
return 0;
}