二分查詢法

2021-10-01 05:12:31 字數 2269 閱讀 4584

二分法是一種非常重要的思想。二分查詢法是一種比較重要的查詢演算法,其執行效率要比遍歷查詢快非常多

但是其必須有乙個條件是陣列必須有序,具體的排序演算法後面遇到再說。

假設陣列公升序,則可以寫出二分查詢的演算法:

//二分查詢,假設陣列公升序

intbinary_search

(int array,

int lenth,

int x)

else

if(x < array[mid]

)else

if(x == array[mid])}

return-1

;}//這個二分查詢的演算法也可以用遞迴實現

intbinary_search

(int arr,

int len,

int x)

else

if(x < arr[mid]

)else

if(x == arr[mid])}

return-1

;}

另外,二維陣列也可以利用類似二分的思想,這裡舉乙個非常簡單的例子。比如:

楊氏矩陣

有乙個二維陣列.

陣列的每行從左到右是遞增的,每列從上到下是遞增的.

在這樣的陣列中查詢乙個數字是否存在。

時間複雜度小於o(n);

陣列:1 2 3

2 3 4

3 4 5

1 3 4

2 4 5

4 5 6

1 2 3

4 5 6

7 8 9

用二分的思想則時間複雜度是一定小於o(n)的。

//找到返回1,未找到返回-1

//因為下標是兩個,返回不了兩個數,則可以通過改變外部已經定義好的某些變數

//可以通過將傳進函式的外部引數通過指標改變

//也可以定義陣列或結構體等將結果帶出

intsearch

(int array[

3],int i,

int j,

int x)

else

if(x < array[mid_row]

[mid_col]

)else

if(x == array[mid_row]

[mid_col])}

return-1

;}

以下是一些測試

#include

#include

intmain()

;int ret =0;

ret =

binary_search

(arr,

sizeof

(arr)

/sizeof

(arr[0]

),5)

;printf

("%d\n"

, ret)

; ret =

binary_search

(arr,

sizeof

(arr)

/sizeof

(arr[0]

),12)

;printf

("%d\n"

, ret)

; ret =

binary_search

(arr,

sizeof

(arr)

/sizeof

(arr[0]

),5)

;printf

("%d\n"

, ret)

; ret =

binary_search

(arr,

sizeof

(arr)

/sizeof

(arr[0]

),12)

;printf

("%d\n"

, ret)

;int yang_arr[3]

[3]=

,,};

ret =

search

(yang_arr,3,

3,5)

;printf

("%d\n"

, ret)

; ret =

search

(yang_arr,3,

3,12)

;printf

("%d\n"

, ret)

;system

("pause");

return0;

}

二分查詢法

二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。優缺點 折半查詢法的優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。演算法思想 首先,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者...

二分查詢法

有序陣列中的find 方法 public int find long serchkey int lowerbound 0 int upperbound nelems 1 while true curin lowerbound upperbound 2 if a curin serchkey retu...

二分查詢法

演算法基本思想 二分查詢演算法的前置條件是,乙個已經排序好的序列 假設這個序列是公升序排列的 這樣在查詢所要查詢的元素時,首先與序列中間的元素進行比較,如果大於這個元素,就在當前序列的後半部分繼續查詢,如果小於這個元素,就在當前序列的前半部分繼續查詢,直到找到相同的元素,或者所查詢的序列範圍為空為止...