查找——折半查找

1.折半查找

折半查找也叫二分法
是类通过二叉排序树查找的一种查找方式,在手算分析的时候可以构建一颗二叉排序树简化操作,而此时的二叉排序树实质上是二叉平衡树。他的时间复杂度为O(log2 n),普通的顺序查找时间复杂度是O(n)


主要是通过缩小范围来确定关键字的位置  
给定 low high key
mid =(low+high)/2   low <= high  这其实是折半查找的核心

1.非递归方法


int  search(int a[], int low,int high,int key)
{
    int mid;
    while (low <= high)
    {
        mid = (low + high) / 2;
        if (a[mid] > key)
        {
            high = mid - 1;
        }
        else if (a[mid]< key)
        {
            low = mid + 1;
        }
        else return mid;
    }
    return -1;
}

2.递归方法

int  search(int a[], int low, int high, int key)
{
	int mid;
	if (low <= high)
	{
		mid = (low + high) / 2;
		if (a[mid] == key)
			return mid;
		else if (a[mid] > key)
		{
			search(a, low, mid - 1, key);
		}
		else if (a[mid] < key)
		{
			search(a, mid + 1, high, key);
		}
		else return mid;
	}
	else return -1;
}

你可能感兴趣的:(算法)