《程式設計珠璣》程式碼之路7:這演算法全世界程式設計師16年才寫對,你肯定想不到竟然是這個
阿新 • • 發佈:2018-12-21
這篇部落格要講的演算法,是個有故事的演算法,大家一定會喜歡的:
有這麼一個演算法:
1:業界巨佬經典鉅著《程式設計珠璣》的作者,在課堂上給出了思想,不限時間讓程式設計師們實現,所有的程式設計師在提交的時候都覺得自己寫的是對的,然而結果是即使是高階程式設計師,90%以上的人都寫錯了。
2:世界史詩級計算機天才、人工智慧之父、圖靈獎獲得者Donald Ervin Knuth,在傳說級鉅著《計算機程式設計藝術》中提到:有個演算法的論文在1946年就發表了,但這個演算法第一個沒有錯誤的程式直到1962年才出現。
想必這個演算法一定很牛逼吧!!!!
瑟瑟發抖。。。。
瑟瑟發抖。。。。
瑟瑟發抖。。。。
瑟瑟發抖。。。。
瑟瑟發抖。。。。
瑟瑟發抖。。。。
好了,不賣關子了,它的名字叫“二分查詢”!!!!!!!!!!!!
好了以上的故事都是真的。
謹以這個故事勉勵所有程式設計師,不要妄自菲薄,隨意貶低自己喪失自信。全世界16年,多少天才呀。
無論什麼時候,一定要相信自己,努力練習,不斷提升自己,永遠都是來得及的。不要老覺得自己智商不夠。
#include <iostream> #include <cstdio> #include <vector> using namespace std; vector<int> nums; //儲存要搜尋陣列的vector int target = 123; //要搜尋的目標 // 如果不正常的話反回-1 int BinarySearch(vector<int> &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<int> &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; }