經典演算法 二分查詢

2022-03-30 22:35:59 字數 1423 閱讀 3916

題目說明:

二分查詢法是對一組有序的數字中進行查詢,傳遞相應的資料,進行比較查詢到與原資料相同的資料,查詢到了返回對應的陣列下標,失敗返回-1。

題目解析:

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。

二分查詢可以解決(預排序陣列的查詢)問題:只要陣列中包含t(即要查詢的值),那麼通過不斷縮小包含t的範圍,最終就可以找到它。其演算法流程如下:

1、一開始,範圍覆蓋整個陣列。

2、將陣列的中間項與t進行比較,如果t比陣列的中間項要小,則到陣列的前半部分繼續查詢,反之,則到陣列的後半部分繼續查詢。

3、如此,每次查詢可以排除一半元素,範圍縮小一半。就這樣反覆比較,反覆縮小範圍,最終就會在陣列中找到t,或者確定原以為t所在的範圍實際為空。

程式**:

#include using

namespace

std;

//遞迴函式

templateint binarysearch(t* data, int low, int high, int

key)

int mid = (high + low) / 2

;

if (data[mid] ==key)

else

if (data[mid] >key)

else}//

非遞迴函式實現

templateint binarysearch2(t* data, int len, int

key)

else

if(data[mid] >key)

else

}return -1;}

test(pojs, tbinarysearch)

; assert_eq(binarysearch(d1,

0, 7, 4),3

); assert_eq(binarysearch2(d1,

8, 4),3

); assert_eq(binarysearch(d1,

0, 7, 9),-1

); assert_eq(binarysearch2(d1,

8, 9),-1

);

int d2 = ;

assert_eq(binarysearch(d2,

0, 0, 2),0

); assert_eq(binarysearch2(d2,

1, 2),0

); assert_eq(binarysearch(d2,

0, 0, 3),-1

); assert_eq(binarysearch2(d2,

1, 3),-1

);}

經典演算法 二分查詢

二分查詢這種老生常談的話題,說的很簡單,但是仍然有些大夥不明白,所以這裡希望自己能夠寫出一篇很淺顯易懂的部落格幫助大家理解 給定陣列已經排序好,然後對其進行編號。這裡我們預設是從小到大的,否則演算法就要進行更改了 思想 因為陣列是有序的,所以每次和陣列中間的乙個比較,通過和其大小的關係,然後再折半比...

經典的查詢演算法1 二分查詢

二分查詢演算法基本思想 二分查詢演算法的前置條件是,乙個已經排序好的序列 在本篇文章中為了說明問題的方便,假設這個序列是公升序排列的 這樣在查詢所要查詢的元素時,首先與序列中間的元素進行比較,如果大於這個元素,就在當前序列的後半部分繼續查詢,如果小於這個元素,就在當前序列的前半部分繼續查詢,直到找到...

經典演算法學習 二分查詢

在所有的查詢演算法中,二分查詢是最簡單一種。二分查詢要求原先的序列是已經排序的,每次都是以序列中間的數字作為比較,如果小於中間的數字,那麼就在序列左邊繼續遞迴查詢 如果大於中間的數字,那麼就在序列右邊繼續遞迴查詢。直到找到該數字,或者直到序列中只有乙個數字的時候都還沒找到,則查詢失敗。查詢的時間複雜...