CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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);
}




[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.