У меня есть два массива ints в C, и я бы хотел их сравнить. Это очень быстро, что я взломал вместе, но мне интересно, есть ли более быстрый способ.Элегантный способ сравнения значений несортированных массивов в C?
1) Найдите целое число, которое не находится в массиве (arr2), который мы сравниваем.
2) Скопируйте этот исходный массив (arr2).
3) Итерацию через первый массив (arr1), и если элемент найден в скопированном массиве, мы заменяем значение в этом индексе значением, которое, как известно, не было в исходном массиве (это необходимо для предотвращения короткого замыкания когда в массиве находится несколько одинаковых значений).
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <random.h>
bool isin(int arr[], int elem, size_t len, size_t *index) {
int i;
for (i = 0; i < len; ++i) {
if (arr[i] == elem) {
if(index != NULL)
*index = i;
return true;
}
}
return false;
}
int notInArray(int arr[], size_t len) {
int r;
do {
r = rand();
} while (isin(arr, r, len, NULL));
return r;
}
bool arraysEqual(int arr1[], int arr2[], size_t len) {
size_t i, j, index;
int notInArr2 = notInArray(arr2, len);
int *arr = (int*)malloc(len * sizeof(int));
for (i = 0; i < len; ++i)
arr[i] = arr2[i]; /*copy arr2 to arr*/
for (i = 0; i < len; ++i) {
if (isin(arr, arr1[i], len, &index))
arr[index] = notInArr2; /*replace that elemnt with something that we know is not in the original array*/
else
return free(arr), false;
}
free(arr);
return true;
}
int main() {
srand(time(NULL));
int a[] = { 3, 9, 1, 3, 8 };
int b[] = { 1, 8, 3, 3, 9 };
printf("%i\n", arraysEqual(a, b, sizeof(a)/sizeof(int)));
system("pause");
}
Я не обязательно ищу исходный код, но более общее представление о том, как я его реализую.
Используйте 'memcpy' для копирования массивов. – Rabbid76