其实是传统二分查找的一点变形: 需要找到数组中出现的第一个元素。 比如数组元素是 1 2 2 2 3 4 5 查找2的话,返回数组下标为1,而不是2或者3 # include <stdio.h> int FirstBinSearch(int a[], int n, int key) { int l = 0, r = n-1; int ret = -1; while( l <= r ) { int m = ( l + r ) / 2; if( a[m] > key) r = m -1; else if ( a[m] < key) l = m + 1; else { ret = m; r = m-1;//并不返回,继续往前找 } } return ret; } int main() { int key = 4; int a[5] = {2,2,2,4,4}; printf("%d/n",FirstBinSearch(a, 5, key)); }