1.问题描述
折半查找。
2.问题分析
在一个有序的序列中查找某个元素,首先将所找元素与序列中间值进行比较
1、如果所找元素等于中间元素,即找到
2、如果所找元素小于中间元素,则在左半边继续查找
3、如果所找元素大于中间元素,则在右半边继续查找
4、如果最终只剩下一个元素仍然不等于所找元素,则查找失败
3.代码
#include "stdlib.h"
#include <iostream>
using namespace std;
int binSearch(int key[], int n, int k)
{
int low = 0, high = n-1, mid;
while(low <= high)
{
mid = low + (high - low)/2;
if(key[mid] == k)
return mid;
if(k > key[mid])
low = mid + 1;
else
high = mid -1;
}
return -1;
}
int main(int argc, char* argv[])
{
int arr[6] = {1,3,5,7,18,34};
cout << binSearch(arr, 6, 18);
system("pause");
return 0;
}
4.总结
本题的关键在于理解折半查找的思想。