二分查詢
/**
* 二分查詢,找到該值在陣列中的下標,否則為-1
*/static
int binaryserach(int array, int key)
else
if (array[mid] < key)
else
}return -1;
}
每次移動left和right指標的時候,需要在mid的基礎上+1或者-1, 防止出現死迴圈, 程式也就能夠正確的執行。
注意:**中的判斷條件必須是while (left <= right),否則的話判斷條件不完整,比如:array[3] = ;待查詢的鍵為5,此時在(low < high)條件下就會找不到,因為low和high相等時,指向元素5,但是此時條件不成立,沒有進入while()中。
例題 給定乙個已經排好序的字串陣列,空字串散布在該陣列中,編寫乙個函式尋找乙個 給定字串的位置。
思路:既然有序,一定是二分查詢。當遇到空字元時,mid+1,一直到mid不為空字元。
#include
using
namespace
std;
int search(string s,int low,int high,string x)
if(s[t] == x)
return t;
else
if(s[t] < x)
low = t+1;
else
high = mid-1;
}return -1;
}int main() ;
cout
<0, 12, "ball")0;}
你真的會二分查詢嗎?
看到這個標題無論你是處於怎樣的心理進來看了,我覺得都是值得的。因為這個問題太簡單,任何乙個開始接觸 真正 演算法基本都是從二分查詢開始的。至於二分查詢都不知道是什麼的可以先去找別的資料看下,再來看這篇文章。既然很簡單,那麼我們開始一起寫乙個吧,要求是對num 不減序列在區間 0,7 進行查詢,當然我...
你真的會二分查詢嗎?
引用請註明出處 看到這個標題無論你是處於怎樣的心理進來看了,我覺得都是值得的。因為這個問題太簡單,任何乙個開始接觸 真正 演算法基本都是從二分查詢開始的。至於二分查詢都不知道是什麼的可以先去找別的資料看下,再來看這篇文章。既然很簡單,那麼我們開始一起寫乙個吧,要求是對num 不減序列在區間 0,7 ...
你真的會二分查詢嗎?
看到這個標題無論你是處於怎樣的心理進來看了,我覺得都是值得的。因為這個問題太簡單,任何乙個開始接觸 真正 演算法基本都是從二分查詢開始的。至於二分查詢都不知道是什麼的可以先去找別的資料看下,再來看這篇文章。既然很簡單,那麼我們開始一起寫乙個吧,要求是對num 不減序列在區間 0,7 進行查詢,當然我...