二分查找【c语言】

#include <stdio.h>

int halfSearch( int arr[], int num, int size ) {
	int min = 0, max = ( size - 1), mid;
	if ( size == 0 ) { return -1; }
	while ( 1 ) {
		// 1. when the boundary is "min" or "max"
		if ( num == arr[ min ] ) { return min ; }
		if ( num == arr[ max ] ) { return max ; }
		
		// 2. check the not found.
		if ( 1 == ( max - min ) ) { return -1; }
		
		// 3. reset the middle.
		mid = ( max - min ) / 2 + min;

		// 4. check num is middle, and reset the boundary "min" or "max"
		if ( num == arr[ mid ] ) { return mid; }
		else if ( num > arr[ mid ] ) {
			min = mid;
		} else {
			max = mid;
		}

	}

	return -1;
}

void main(void) {
	int arr[] = {1,3,4,6,7,8,8,9,44,345,666}; // 

	int idx = halfSearch( arr, 9 , sizeof( arr ) / sizeof( int  ) );


	if ( idx == -1 ) {
		printf( "未找到!\n" );
	} else {
		printf( "找到数据%d,下标%d \n", arr[idx], idx );
	}
}


已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



原文地址:https://www.cnblogs.com/qwop/p/3438443.html