我在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