普通二分法查找元素:
成都創(chuàng)新互聯(lián)長期為1000+客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為鐵門關企業(yè)提供專業(yè)的成都網(wǎng)站建設、成都做網(wǎng)站,鐵門關網(wǎng)站改版等技術服務。擁有十余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。#include#include int BinarySearch(int* a, int n, int pos) { int left = 0; int right = n-1; while (left <= right) { int mid = left+(right-left)/2; if(pos == a[mid]) { return mid; } else if(pos < a[mid]) { right = mid - 1; } else { left = mid + 1; } } return -1; } int main() { int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int ret = BinarySearch(arr, 10, 5); printf("pos : %d\n", ret); system("pause"); return 0; }
顯示結果:
那如果是查找數(shù)組中第一次出現(xiàn)的那個元素,這種方法顯然是不可行。
就需要修改一小下下
#include#include int BinarySearch(int* a, int n, int pos) { int left = 0; int right = n-1; while (left <= right) { int mid = left+(right-left)/2; if(pos == a[mid]) { while(mid-1 >= 0 && pos == a[mid-1]) { mid = mid-1; } return mid; } else if(pos < a[mid]) { right = mid - 1; } else { left = mid + 1; } } return -1; } int main() { int arr1[10] = {1,2,3,4,5,6,7,8,9,10}; int arr2[13] = {1,2,3,4,5,5,5,5,6,7,8,9,10}; int ret1 = BinarySearch(arr1, 10, 5); int ret2 = BinarySearch(arr2, 10, 5); printf("pos1 : %d\n", ret1); printf("pos1 : %d\n", ret2); system("pause"); return 0; }
顯示結果:
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。