对分查找

给定一个整数X和整数A0, A1, A2, ..., A(n - 1);后者已经排序并在内存中,求Ai = X 的下标 i,如果不在数据中,则返回 i = -1

int
BinarySearch( const int a[], int x, int n ) {
	int low, mid, high;
	
	low = 0;
	high = n - 1;
	
	while( low <= high ) {
		mid = ( low + high ) / 2;
		if( a[mid] > x )
			high = mid - 1;
		else if( a[mid] < x )
			low = mid + 1;
		else 
			return mid;      // found
	}

	return -1;              // not found
}


下面是实现对分查找使得在每次迭代中只有一个二路比较

    

int
BinarySearch( const int a[], int x, int n ) {
	int low, mid, high;
	
	low = 0, high = n - 1;
	mid = ( low + high ) / 2;
	while( ( low <= high ) &&  ( a[mid] != x ) ) {
		if( a[mid] > x ) { 
			high = mid - 1;
			mid = ( low + high ) / 2;
		} 
		else if( a[mid] < x ) {
			low = mid + 1;
			mid = ( low + high ) / 2;
		}
	}
	
	if( a[mid] == x )
		return mid;
	else
		return -1;              // not found
}


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