| [ CnUnix ] in KIDS 글 쓴 이(By): ahsarang (.아.사.랑.) 날 짜 (Date): 2002년 2월 22일 금요일 오후 08시 16분 07초 제 목(Title): Re: [질문] 간단한 알고리즘.... 다 0이고 하나만 1이다면 이걸 array로 가지고 있을 이유도, 검색할 이유도 없어보입니다만... 초기화 하는 과정 또는 데이터를 추가하는 과정에서 1인 넘의 index를 기억 하고 있으면 될테니까요... binary search정도 쓰면 되지 않을까요? ------------------------------------------------------------------------- void * binary_search( const void *key, void *list, int ls, /* list내의 노드 개수 */ int ns, /* 노드 사이즈 */ int (*cmp)(const void *k, const void *n)) { int mid, c; if (ls == 0) return NULL; /* not found */ mid = ls / 2; c = cmp(key, (void *)((int)list + (mid * ns))); if (!c) // 같으면 return (void *)((int)list + (mid * ns)); if (c > 0) { // 오른쪽 ls = ls - (mid + 1); list = (void *)((int)list + ((mid + 1) * ns)); } else ls -= (ls % 2) ? (mid + 1) : mid; return binary_search(key, list, ls, ns, cmp); } |