c++排序之二分法
阿新 • • 發佈:2019-01-02
1. 二分法查詢是一種非常高效的搜尋方法,主要原理是每次搜尋可以拋棄一半的值來縮小範圍。
在離散數學中,如果f(n)是在規模為n的搜尋序列中搜索一個元素所需要的比較次數,當n是偶數時,f(n)= f(n/2)+2
2. 二分法查詢的時間複雜度是O(logn)
3. 二分法查詢的適用情況一般滿足以下幾點:(1). 該陣列資料量巨大;{2}. 該陣列已經排序;(3). 一般要求找到的是某一個值
4. 什麼時候我們可以大致判定該題需要用到二分法:(1). 需要對一道時間複雜度為n的題目進行優化;(2). 在題目中提到給到的陣列已排序;(3). 只搜尋一個值或一個位置
5. 二分法的基本程式碼如下:對於特定的題只需要修改某些細節即可。
#include <iostream> using namespace std; int search(int arr[10],int target){ int start = 0; int end = 9; while(start+1<end){ int mid = (start + end)/2; if(arr[mid]<target){ start = mid; } if(arr[mid]>target){ end = mid; } if(arr[mid]==target){ return mid; } if(arr[start]==target){ return start; } if(arr[end]==target){ return end; } } return -1; } int main (){ int _arr[10]; for(int i = 0; i < 10; ++ i){ cin >> _arr[i]; } int _target; cin >> _target; if(search(_arr,_target)==-1){ cout << "No , the number doesn't exist in the array!" <<endl; } else { cout <<"Yes,I find the number at " <<search(_arr,_target)+1<<" in the array!" <<endl; } }