面試題3

#include <stdio.h>

/// 1 4 7

/// ret -1 前查找
/// ret 0 找到
/// ret 1 後查找
int com_imple(const void* src, const void* tar)
{
	int data1 = *((int*)src);
	int data2 = *((int*)tar);

	if (data1 == data2)
		return 0;
	else if (data1 < data2)
		return 1;
	else
		return -1;
}

typedef int (*compare)(const void*, const void*);
int find(const void* arry, const int count, const int size, 
		compare com_func, const void *target)
{
	void* src;
	int head, tail, mid, ret;	
	head = 0;
	tail = (count - 1);

	while (head < tail) {
		
		mid = ((head + tail) / 2);
		src = (char *)arry + (mid * size);
		ret = com_func(src, target);

		if (ret == 0) 
			return mid;		
		else if (ret < 0)
			tail = (mid - 1);
		else 
			head = (mid + 1);
	}	
	if (head == tail) {
		src = (char*)arry + (head * size);
		ret = com_func(src, target);
		if (ret == 0) 
			return head;		
	}
	return -1;
}

int main()
{
	int arry[4] = {1, 2, 8, 10};
	int target = 8;
	int ret = find(arry, 4, 4, com_imple, &target);
	printf("find target @%d \n", ret);
	target = 10;
	ret = find(arry, 4, 4, com_imple, &target);
	printf("find target @%d \n", ret);
	target = 12;
	ret = find(arry, 4, 4, com_imple, &target);
	printf("find target @%d \n", ret);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章