二分法查找

#include <stdio.h>

#define MAXSIZE 10

typedef struct{
	int list[MAXSIZE];
	int length;
}List;

int binary_search(List s, int key);

int main(int argc, char **argv)
{
	int a[MAXSIZE] = {1, 3, 9, 12, 18, 23, 56, 69, 73, 84};
	List s;
	int i, k, rst;
	// initialize the list s
	s.length = MAXSIZE;
	for(i=0; i<MAXSIZE; i++){
		s.list[i] = a[i];
	}
	printf("Enter the key number:");
	scanf("%d", &k);
	rst = binary_search(s, k);
	if(0 == rst)
		printf("The key is not in the list!\n");
	else
		printf("The key is int list, position is:%d\n", rst);
	return 0;
}

int binary_search(List s, int key)
{
	int low, mid, high;
	low = 0;
	high = s.length - 1;
	//mid = (high + low) / 2;
	// Get the average of number high and low
	mid = (high & low) + ((high ^ low)>>1);
	printf("mid=%d\n", s.list[mid]);
	if(key < s.list[low] || key > s.list[high])
		goto NOT_INLIST;// return 0 directly will faster than goto NOT_INLIST
	while(high >= low){
		if(s.list[mid] > key){ //turn to the left part
			printf("mid=%d\n", s.list[mid]);
			high = mid - 1;
			// mid = (high + low) / 2;
			mid = (high & low) + ((high ^ low)>>1);
		}
		else if(s.list[mid] < key){// turn to the right part
			printf("mid=%d\n", s.list[mid]);
			low = mid + 1;
			// mid = (high + low) / 2;
			mid = (high & low) + ((high ^ low)>>1);
		}
		else // The key has been searched
			return (mid + 1);
			
	}
NOT_INLIST:
	return 0; // no such key
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值