面試中有個題是有序數組用二分法查詢,哎,一看到是算法的題我當時就蒙圈了。真心的不曉得怎麼做了。後來後查下百度其實沒有我想的那麼難,還是寫下來是怎麼回事吧,要不怕以後忘記了。
二分法查詢其實就是在這個數組是一個有序的時候纔可以用到如果是無序數組貌似沒什麼好的方法去做最優算法了(也可能是我還沒有看到學到,如果以後接觸到了我在來寫哈,,),
二分法,二分法,既然都說是二分了。那肯定是要把一個數組二分了。(也就是分成兩半),直接取這個數組的中間點的值和需要查詢的數做對比,當發現這個數大於中心點那麼這個數肯定是在中心點的右邊啦。。畢竟人家大要在後面的說。之後就把中心點的值賦給開始位置。也就是從中心點開始到結尾在做一次二分法。這樣一次次的查詢就能找到要找的數的位置了
//一個數組
private int[] array;
//二分法查詢一個數返回下角標 傳入一個數
private int BinarySearch(int searchKey){
//n 代表數組的總長度 (只是一個寫法後面這個N要給真的賦值哦)
int n = 1;
//開始的座標
int lowBound = 0;
//結尾的座標
int highBound = n - 1;
//當前的座標
int CurrentIndex;
//做循環直到查找到這個值後返回
while (true) {
CurrentIndex = (lowBound + highBound) / 2;
if (array [CurrentIndex] == searchKey) {
return CurrentIndex;
}
if (lowBound > highBound) {
return n;
} else {
if (array [CurrentIndex] < searchKey) {
lowBound = CurrentIndex + 1;
} else if(array[CurrentIndex] > searchKey){
highBound = CurrentIndex - 1;
}
}
}
}