二分搜索技术
给定已按升序排好序的n个元素a【0:n-1】,现要在这n个元素中找出一特定的元素x。
分析:
- 该问题的规模缩小到一定程度就可以容易地解决;
- 该问题可以分解为若干个规模较小的相同问题;
- 分解出的子问题的解可以合并为原问题的解;
- 分解出的各个子问题是相互独立的。
据此容易设计出二分搜索算法:
template<class Type>
int Binary Search(Type a[], const Type& x, int n)
{ int left=0;
int right=n-1
while(left<=right){
int middle =(left+right)/2;
if(x==a[middle]) return middle;
if(x>a[middle]) left=middle+1;
else right= middle-1;}
return -1; //未找到x
}
算法测试及结果:
#include "pch.h"
#include <iostream>
using namespace std;
template <class type>
int BinarySearch(type a[], type x, int n)
{
int left = 0;
int right = n - 1;
while (left <= right)
{
int middle = (left + right) / 2;
if (x == a[middle])return middle;
if (x >