二分查找算法及其改写(C++实现)

二分查找算法及其改写(C++实现)

二分查找算法是利用分治策略的典型例子。
设a[0:n-1]是已排好序的数组,在这n个元素中找出一特定元素x。
基本思想是将n个元素分成个数大致相同的两半,取a[n/2]与x进行比较,如果x=a[n/2],则找到x,算法终止,如果x 代码如下:

int binarySearch(int a[],int x,int n)
{
    int left=0,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;
} 

二分查找改写:设a[0:n-1]是已排好序的数组。要求使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
代码如下:

int binarySearch(int a[],int x,int n)
{
    int left=0,right=n-1;
    int i=0,j=0;
	while(left<=right)
	{
		int middle=(left+right)/2;
		if(x==a[middle])
		{
			i=j=middle;
            cout<a[middle]) left=middle+1;
		else right=middle-1; 
	}	
	i=right;
    j=left;
    cout<

时间复杂度:
最坏情况下while循环执行O(logn)次,所以最坏情况下时间复杂度为O(logn)。

你可能感兴趣的:(算法复习,算法,C++)