题目:
求排序数组中某个数字出现的次数。
二分查找的加强版。
int GetFirstK(int *data, int length, int k, int start, int end) //数组首地址,数组长度,数字,开始查找位置,结束查找位置; { if (data == NULL || length == 0 || start > end) return 0; int middle = start + (end - start) / 2; if (data[middle] == k) { if (middle > 0 && data[middle - 1] != k) return middle; else end = middle - 1; } else if (data[middle] > k) end = middle - 1; else start = middle + 1; return GetFirstK(data, length, start, end); } int GetLastK(int *data, int length, int k,int start, int end) { if (data == NULL ||length==0|| start > end) return 0; int middle = start + (end - start) / 2; if (data[middle] == k) { if (middle > 0 && data[middle + 1] != k) return middle; else start = middle + 1; } else if (data[middle] > k) end = middle - 1; else start = middle + 1; return GetLastK(data, length, k, start, end); } int GetNumberOfK(int *data,int length, int k) { if (data == NULL||length==0) return 0; int number = 0; if (data != NULL&&length > 0) { int first = GetFirstK(data, length, k, 0, length - 1); int last = GetLastK(data, length, k, 0, length - 1); number = last - first + 1; } return number; }