《编程珠玑》代码之路7:这个算法全世界程序员16年才写对,你肯定想不到竟然是这个

这篇博客要讲的算法,是个有故事的算法,大家一定会喜欢的:

有这么一个算法:

1:业界巨佬经典巨著《编程珠玑》的作者,在课堂上给出了思想,不限时间让程序员们实现,所有的程序员在提交的时候都觉得自己写的是对的,然而结果是即使是高级程序员,90%以上的人都写错了。

2:世界史诗级计算机天才、人工智能之父、图灵奖获得者Donald Ervin Knuth,在传说级巨著《计算机程序设计艺术》中提到:有个算法的论文在1946年就发表了,但这个算法第一个没有错误的程序直到1962年才出现。

想必这个算法一定很牛逼吧!!!!

瑟瑟发抖。。。。

瑟瑟发抖。。。。

瑟瑟发抖。。。。

瑟瑟发抖。。。。

瑟瑟发抖。。。。

瑟瑟发抖。。。。

好了,不卖关子了,它的名字叫“二分查找”!!!!!!!!!!!!

好了以上的故事都是真的。

谨以这个故事勉励所有程序员,不要妄自菲薄,随意贬低自己丧失自信。全世界16年,多少天才呀。

无论什么时候,一定要相信自己,努力练习,不断提升自己,永远都是来得及的。不要老觉得自己智商不够。

#include 
#include 
#include 

using namespace std;

vector nums; //存储要搜索数组的vector
int target = 123; //要搜索的目标

// 如果不正常的话反回-1
int BinarySearch(vector &arr, int target);

int main(){
	freopen("in.txt", "r", stdin);

	int num;
	while (scanf("%d", &num) != EOF){
		nums.push_back(num);
	}

	int pos = BinarySearch(nums, target);

	if (pos >= 0 && pos < nums.size()){
		cout << pos <<  ' ' << nums[pos] << endl;
	}else{
		cout << "error" << endl;
	}

	return 0;
}

int BinarySearch(vector &arr, int target){
	int left = 0, right = arr.size() - 1;

	while (left <= right){
		int mid = (left + right) / 2;
		if (arr[mid] == target){
			return mid;
		}else if (arr[mid] < target){
			left = mid + 1;
		}else if (arr[mid] > target){
			right = mid - 1;
		}else{
			return -1;
		}
	}

	return -1;
}

 

你可能感兴趣的:(编程珠玑)