bsearch.c
来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 37 行
C
37 行
/* @(#)bsearch.c 1.5 *//*LINTLIBRARY*//* * Binary search algorithm, generalized from Knuth (6.2.1) Algorithm B. * */typedef char *POINTER;POINTERbsearch(key, base, nel, width, compar)POINTER key; /* Key to be located */POINTER base; /* Beginning of table */unsigned nel; /* Number of elements in the table */unsigned width; /* Width of an element (bytes) */int (*compar)(); /* Comparison function */{ int two_width = width + width; POINTER last = base + width * (nel - 1); /* Last element in table *//* DAG -- WARNING! The following test is not safe due to possible address wrap-around when `width' is large. I have seen it happen! */ while (last >= base) { register POINTER p = base + width * ((last - base)/two_width); register int res = (*compar)(key, p); if (res == 0) return (p); /* Key found */ if (res < 0) last = p - width; else base = p + width; } return ((POINTER) 0); /* Key not found */}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?