BinarySearch 二分查找

#include<iostream>
#include<string>
#include<time.h>
#include<algorithm>
using namespace std;
int rank1(int key, int *a,int length)
	{
		int lo = 0;
		int hi = length -1;
		int mid;
		while(lo <=hi)
		{
			mid= (lo+hi)/2;
			if(a[mid]==key) return mid;
			else if(a[mid]>key) hi=mid-1;
			else lo=mid+1;
		}
		return -1;
	}
int main()
{
	 srand((unsigned int) time(0));
	 int a[100]={0};
	 for(int i=0;i<100;i++)
	 {
		 a[i] = rand()%1000;
	 }
	 sort(a,a+100);
	 a[99]=1001;
	 int result =rank1(10, a, 100);
	 cout<<result<<endl;


	 system("pause");
	return 0;
}

使用前提:待查找的数组必须是有序的,这里排序采用了STL的sort方法,主要是基于快速排序算法的,在之后的博客里我会陆续更新。

时间复杂度:O(lg n) 由于2的n次方为n

空间复杂度: 主要是数组本身的空间

基本思想:假设排序好的数组是升序。当我们想要查找对应key所在数组的位置时,每一次都与数组中间位置的值进行对比:        1. 如果数组中间值大于key那么,要找的值如果存在一定位于数组的前半部分,那么更新hi=mid-1;同时更新mid。

     2.如果数组中间值小于key那么,要找的值如果存在一定位于数组的后半部分,那么更新low=mid+1;同时更新mid。

     3.  如果mid对应的值等于key,那么返回mid就是要找的位置。

结束条件:1. 找到对应的位置 2.hi<low的时候

你可能感兴趣的:(BinarySearch 二分查找)