Half-segment lookup.
int GETFIRSTK (int* data, int length, int k, int start, int end)
{
if (Start > End)
return-1;
int Middleindex = (start + end)/2;
int middledata = Data[middleindex];
if (Middledata = = k)
{
if ((Middleindex > 0 && data[middleindex-1]! = k) | | middleindex = = 0)
return middleindex;
Else
end = MiddleIndex-1;
}
else if (Middledata > K)
end = MiddleIndex-1;
Else
Start = Middleindex + 1;
return GETFIRSTK (data, length, K, start, end);
}
int GETLASTK (int* data, int length, int k, int start, int end)
{
if (Start > End)
return-1;
int Middleindex = (start + end)/2;
int middledata = Data[middleindex];
if (Middledata = = k)
{
if ((Middleindex <length-1 && data[middleindex +1]! = k) | | middleindex = = length-1)
return middleindex;
Else
Start= middleindex+1;
}
else if (Middledata < k)
start = Middleindex +1;
Else
end = MiddleIndex-1;
return GETLASTK (data, length, K, start, end);
}
int GETNUMBEROFK (int* data, int length, int k)
{
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);
if (First >-1 && last >-1)
Number = Last-first + 1;
}
return number;
}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
38. Number of occurrences in the sorted array