- 对网上代码的改进
- 二分查找的递归与非递归算法
- 亲测能运行`
- 长春理工大学路过
#include<iostream>
using namespace std;
int BinSearch1(int Array[], int low, int high, int key)
{
int ret = 0;
int mid = 0;
ret = (Array != NULL) && (low >= 0) && (high >= low);
printf("Search Key: %d\n", key);
while(ret)
{
if(low <= high)
{
mid = (low + high)/2;
if(Array[mid] == key)
{
ret = mid;
printf("BinSearch1 success!!!\nArray[%d] = key\n", mid);
return ret+1;
}
else if(Array[mid] > key)
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
else {cout<<"未找到";return 0;}
}
}
//二分查找递归实现
int BinSearch2(int Array[], int low, int high, int key)
{
int ret = 0;
int mid = 0;
ret = (Array != NULL) && (low >= 0) && (high >=low);
if(ret)
{
mid = (low + high)/2;
if(Array[mid] == key)
{
return mid+1;
}
if(Array[mid] > key)
return BinSearch2(Array, low, mid-1, key);
if(Array[mid] < key)
return BinSearch2(Array, mid+1, high, key);
}
else {cout<<"未找到"; return 0;}
}
int main()
{
int array[10] = {1, 3, 5, 6, 7, 8, 10, 13, 15, 17};
int a;
a = BinSearch1(array, 0, 10, 9);
//a = BinSearch2(array, 0, 10, 2);
if(a!=0)
{printf("a = %d\n", a);
printf("array[%d] = %d\n", a-1, array[a-1]);}
printf("Press enter to continue ...");
getchar();
return 0;
}