在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。
int find(int *a, int n, int x)
{
int half;
if (n <= 0) return 0;
if (n == 1) return a[0] == x ? 1 : 0;
if (a[0] > x || a[n - 1] < x) return 0;
if (a[0] == a[n - 1]) return n;
half = n / 2;
if (a[half] > x) return find(a, half, x);
if (a[half] < x) return find(a + half + 1, n - half - 1, x);
return 1 + find(a, half, x) + find(a + half + 1, n - half - 1, x);
}
求分析复杂度,求改成非递归