먼저 프로필을 만들어야합니다. 우리가 말하는 최대치에서 500 * 100 = 50,000 작업 만입니다. 평균적인 최신 컴퓨터는 코드를 매우 비효율적으로 코딩하지 않는 한 1/1 초 만에 끝낼 수 있습니다.
어쨌든 최적화하려는 경우 마스터 배열을 정렬하고 무작위 배열의 각 요소에 대해 binary search을 실행해야합니다. 이렇게하면 500 개의 숫자를 이원 검색하면 최대 9 개의 비교가 필요하기 때문에 연산 수를 50,000 개에서 900 개로 줄일 수 있습니다. 여기
int less_int(const void* left, const void* right) {
return *((const int*)left) - *((const int*)right);
}
int main(void) {
size_t num_elements = 500;
int* a = malloc(num_elements*sizeof(int));
for(size_t i=0 ; i<num_elements ; i++) {
a[i] = rand() % num_elements;
}
qsort(a, num_elements, sizeof(int), less_int);
size_t num_rand = 100;
int* r = malloc(num_rand*sizeof(int));
for(size_t i=0 ; i < num_rand ; i++) {
r[i] = rand() % num_rand;
}
for (size_t i = 0 ; i != num_rand ; i++) {
int *p = (int*) bsearch (&r[i], a, num_elements, sizeof(int), less_int);
if (p) {
printf ("%d is in the array.\n", *p);
} else {
printf ("%d is not in the array.\n", r[i]);
}
}
free(a);
free(r);
return 0;
}
가 link to this running program on ideone이다 : 여기
내장 사용하는 표준 C 라이브러리의 선별 및 이진 검색 기능 (
qsort
및
bsearch
)을 구현 한 것이다.
목록이 UI와 관련이없는 경우 백그라운드 스레드에서이 기능을 실행할 수 있습니다. – vishy
한 번만 수행하는 것처럼 보이지만 500 개의 항목 배열은 코드에 심각한 속도 저하를 나타내서는 안됩니다. – nickolayratchev
좋아요, 예를 들어 500 개를 주었고 50,000 개를 가져갈 수 있습니다. – Daisy