二分查找的原理:
首先,假设表中元素是按升序排列,将表“中间位置记录的关键字”与“查找关键字”进行比较,如果两者相等,则查找成功。
否则,利用“中间位置的记录”将表分成“前后”两个子表:
(1)如果“查找关键字”<“中间关键字”,前子表查找。
(2)如果“查找关键字”>“中间关键字”,后子表查找。
重复以上过程,直到查找成功。
#include <iostream>
#include <stdlib.h>
using namespace std;
/**********************************/
/* 二分(折半)查找算法
/*********************************/
int BinarySearch(int array[], int n, int key) //二分查找函数,key是查找的元素
{
int left = 0;
int right = n - 1;
while (left <= right)
{
int mid = (right + left) / 2;
if (array[mid] > key)
{
right = mid - 1;
}
else
if (array[mid] < key)
{
left = mid + 1;
}
else
{
return mid; //查找成功,返回mid
}
}
return -1; //没有找到对应的元素,返回-1
}
int main(void) //主程序
{
int array[] = { 1, 2, 3, 4, 5, 6};
cout << "数组为: " << endl;
for (int i = 0; i < 6; i++)
{
cout << "Array" << "[" << i << "]" << " = " << array[i] << endl;
}
cout << endl; //换行
int k = BinarySearch(array, sizeof(array) / sizeof(int), 2);
cout << "数值(2)的位置为:" << endl;
cout << "Array" << "[" << k << "]" << endl;
cout << endl << endl; //换行
system("pause"); //调试时,黑窗口不会闪退,一直保持
return 0;
}