有序陣列的查詢(個人感覺美到極致的一個演算法)
阿新 • • 發佈:2018-12-31
對於包含n個元素的陣列,整個查詢過程大約要經過logn次比較。(二分查詢演算法)
程式碼如下:
非遞迴版本
int BinarySearch(int array[],int n,int value)
{
int left = 0;
int right = n-1;
//如果上面這句是int right = n的話,則下面有兩處需要改動
//while(left < right)
//array[middle]>value的時候 right = mid(基本沒有這樣寫的)
while (left <= right)
{
int mid = left + ((right-left)>>1);//位運算更快
if (array[mid] > value)
{
right = mid-1;
}
else if (array[mid] < value)
{
left = mid+1;
}
else
return mid;//返回的是位置
}
return -1;
}
遞迴版本
int BinarySearch(int array[],int left,int right,int value)
{
if (left > right)
{
return -1;
}
int mid = left + ((right-left)>>1);
if (array[mid] > value)
{
return BinarySearch(array,left,mid-1,value);
}
else if (array[mid ] < value)
{
return BinarySearch(array,mid+1,right,value);
}
else
return mid;
}