C++ 二分(折半)查找算法

二分查找的原理:

首先,假设表中元素是按升序排列,将表“中间位置记录的关键字”与“查找关键字”进行比较,如果两者相等,则查找成功。

否则,利用“中间位置的记录”将表分成“前后”两个子表:

(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;
}

运行结果:

C++ 二分(折半)查找算法