演算法 二分查詢演算法

2021-09-23 23:04:43 字數 1649 閱讀 8972

【思想】

二分搜尋主要解決的問題是確定排序後的陣列x[0,n-1]中是否包含目標元素target。

二分搜尋通過持續跟蹤陣列中包含元素target的範圍(如果target存在陣列中的話)來解決問題。

一開始,這個範圍是整個陣列,然後通過將target與陣列中的中間項進行比較並拋棄一半的範圍來縮小範圍。該過程持續進行,

直到在陣列中找到target或確定包含target的範圍為空時為止。在有n個元素的表中,二分搜尋大約需要執行lgn次比較操作。

提供充足的時間,竟然只有10%的專業程式設計師能夠將這個程式編寫正確。

【正解】

/*********************************

* 日期:2015-01-03

* 題目: 二分查詢演算法

* 部落格:

**********************************/

#include using namespace std;

int binarysearch(int a, int n, int target) //if

int start = 0,end = n-1;

// 二分查詢

while(start <= end)//if

else if(a[mid] > target)//else

else//else

}//while

return -1;

}int main();

cout<【錯解】

/*********************************

* 日期:2015-01-03

* 題目: 二分查詢演算法

* 部落格:

**********************************/

#include using namespace std;

int binarysearch(int a, int n, int target) //if

int start = 0,end = n-1;

// 二分查詢

while(start < end)//if

else if(a[mid] > target)//else

else//else

}//while

return -1;

}int main();

cout<

【錯解二】

/*********************************

* 日期:2015-01-03

* 題目: 二分查詢演算法

* 部落格:

**********************************/

#include using namespace std;

int binarysearch(int a, int n, int target) //if

int start = 0,end = n-1;

// 二分查詢

while(start <= end)//if

else if(a[mid] > target)//else

else//else

}//while

return -1;

}int main();

cout<

二分查詢演算法

1.第一步查詢中間元素,即5,由於5 6,則6必然在5之後的陣列元素中,那麼就在中查詢,2.尋找的中位數,為7,7 6,則6應該在7左邊的陣列元素中,那麼只剩下6,即找到了。二分查詢演算法就是不斷將陣列進行對半分割,每次拿中間元素和goal進行比較。include iostream using na...

二分查詢演算法

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...

二分查詢演算法

二分查詢演算法是在有序陣列中用到的較為頻繁的一種演算法,在未接觸二分查詢演算法時,最通用的一種做法是,對陣列進行遍歷,跟每個元素進行比較,其時間為o n 但二分查詢演算法則更優,因為其查詢時間為o lgn 譬如陣列,查詢元素6,用二分查詢的演算法執行的話,其順序為 1.第一步查詢中間元素,即5,由於...