二分查詢 Go語言 十安辰

2021-10-07 14:45:48 字數 1455 閱讀 1944

思想:遍歷陣列,判斷每乙個元素是否與要查詢元素匹配,簡單,略

首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

必須採用順序儲存結構

必須按關鍵字大小有序排列。

func

binarysearch

(n [

]int

, target int

)int

else

if n[mid]

< target

else

}return-1

//查詢失敗,返回-1

}

這裡用另一種方法,遞迴,這種方法需要注意遞迴截止條件,記憶體開銷也比上述函式大

package main

import

("fmt"

)//二分查詢的函式

/*二分查詢的思路: 比如我們要查詢的數是 findval

1.arr 是乙個有序陣列,並且是從小到大排序

2.先找到 中間的下標 middle = (leftindex + rightindex) / 2, 然後讓 中間下標的值和 findval 進行比較

2.1如果 arr[middle] > findval , 就應該向 leftindex (middle - 1)

2.2如果 arr[middle] < findval , 就應該向 middel+1 rightindex

2.3如果 arr[middle] == findval , 就找到

2.4上面的 2.1 2.2 2.3 的邏輯會遞迴執行

3.想一下,怎麼樣的情況下,就說明找不到[分析出退出遞迴的條件!!] if leftindex > rightindex

*/func

binaryfind

(arr *[6

]int

, leftindex int

, rightindex int

, findval int

)//先找到 中間的下標

middle :=

(leftindex + rightindex)/2

if(*arr)

[middle]

> findval

elseif(

*arr)

[middle]

< findval

else

}func

main()

//測試一把

binaryfind

(&arr,0,

len(arr)-1

,-6)

}

Go 語言 陣列使用 十安辰

package main import fmt 注意 陣列長度小於容量時,會自動填充 func main fmt.println iarr 1 2 3 4 0 var sarr 3 string 3 string fmt.println sarr a 方式二 使用型別推導,系統自行判斷 barr 3...

二分查詢法(Go語言)

二分查詢法,在乙個有序的數列裡,把中間元素v與查詢元素target相比較 二分查詢法 迭代法 go語言 package main import fmt 二分查詢 前提必須在有序的陣列裡,查詢target 如果找到target,返回相應的索引index 如果沒有找到target,返回 1 時間複雜度o...

Go語言實現二分查詢

二分演算法的前提要求傳入的序列是有序的 降序或公升序 並且有乙個目標值。二分演算法主要是首和尾的範圍控制。具體 實現如下 package main import fmt func binary search l int,k int result bool,mid int,count int else...