Какими функциями заменить array_diff() в Си?

В C можно заменить функцию array_diff() при помощи других функций и алгоритмов. Здесь я приведу несколько вариантов:

1. Использование двух циклов:

void array_diff(int arr1[], int size1, int arr2[], int size2, int result[], int *result_size) {
    int i, j, found;

    *result_size = 0;

    // Перебираем элементы первого массива
    for(i = 0; i < size1; i++) {
        found = 0;

        // Сравниваем элемент первого массива с элементами второго массива
        for(j = 0; j < size2; j++) {
            if(arr1[i] == arr2[j]) {
                found = 1;
                break;
            }
        }

        // Если не найдено совпадений, добавляем элемент в результат
        if(!found) {
            result[*result_size] = arr1[i];
            (*result_size)++;
        }
    }
}

Пример использования:

int main() {
    int arr1[] = {1, 2, 3, 4, 5};
    int arr2[] = {3, 4, 5, 6, 7};
    int result[10];
    int result_size;

    array_diff(arr1, 5, arr2, 5, result, &result_size);

    // Выводим результат
    printf("Разность массивов: ");
    for(int i = 0; i < result_size; i++) {
        printf("%d ", result[i]);
    }

    return 0;
}

2. Использование функций из стандартной библиотеки:

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
    return (*(int*)a - *(int*)b);
}

void array_diff(int arr1[], int size1, int arr2[], int size2, int result[], int *result_size) {
    int i, j;
    *result_size = 0;

    // Сортируем оба массива
    qsort(arr1, size1, sizeof(int), compare);
    qsort(arr2, size2, sizeof(int), compare);

    i = j = 0;

    // Вычисляем различие между массивами
    while(i < size1 && j < size2) {
        if(arr1[i] < arr2[j]) {
            result[*result_size] = arr1[i];
            (*result_size)++;
            i++;
        } else if(arr1[i] > arr2[j]) {
            j++;
        } else {
            i++;
            j++;
        }
    }

    // Добавляем оставшиеся элементы первого массива в результат
    while(i < size1) {
        result[*result_size] = arr1[i];
        (*result_size)++;
        i++;
    }
}

Пример использования остается тем же, что и в первом варианте.

Оба варианта решения позволяют получить массив с элементами, которые присутствуют в первом массиве и отсутствуют во втором массиве.