思想:遍歷陣列,判斷每乙個元素是否與要查詢元素匹配,簡單,略
首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
必須採用順序儲存結構
必須按關鍵字大小有序排列。
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...