日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Golang】查找-学习笔记

發布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Golang】查找-学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Golang中,常用的查找有兩種:順序查找、二分查找。

1. 順序查找

舉個栗子
有一個數列:白眉鷹王、金毛獅王、紫衫龍王、青翼蝠王
猜數游戲:從鍵盤中任意輸入一個名稱,判斷數列中是否包含此名稱【順序查找】
代碼

package main import "fmt"func main(){// 有一個數列:白眉鷹王、金毛獅王、紫衫龍王、青翼蝠王//猜數游戲:從鍵盤中任意輸入一個名稱,判斷數列中是香包含此名稱【順序查找】//思路//1.定義一個數組,白眉鷹王、金毛獅王、紫衫龍王、青翼蝠王字符串數組//2.從控制臺接收一個名字,依次比較,如果發現有,提示// 代碼names := [4]string{"白眉鷹王","金毛獅王","紫衫龍王","青翼蝠王"}var heroName = ""fmt.Println("請輸入要查找的人名..")fmt.Scanln(&heroName)// 順序查找:第一種方式for i := 0; i < len(names); i++{if heroName == names[i]{fmt.Printf("找到%v,下標%v\n",heroName,i)break}else if i == (len(names)-1){fmt.Printf("沒有找到%v\n",heroName)}}// 順序查找:第二種方式(推薦)index := -1for i := 0; i < len(names); i++{if heroName == names[i]{index = ibreak}}if index == -1{fmt.Printf("沒找到%v\n",heroName)}else{fmt.Printf("找到%v,下標%v\n",heroName,index)} }

2. 二分查找(該數組是有序的)

舉個栗子
請對一個有序數組進行二分查找{1,8,10,89,1000,1234},輸入一個數看看該數組是否存在此數,并且求出下標,如果沒有就提示"沒有這個數"。【會使用到遞歸】
二分查找的思路分析
arr = [1,8,10,89,1000,1234] 8
二分查找的思路:比如要查找的數是key
1).arr是一個有序數組,并且是從小到大排序
2).先找到中間的下標mid=(leftl+right)/2,然后讓中間下標的值和key進行比較
(1)如果arr[mid] >key,就應該向left ----(mid-1)
(2)如果arr[mid]<key,就應該向mid+1---- right
(3)如果arr[mid] == key,就找到
(4)上面的1).2).3)的邏輯會遞歸執行
3)分析退出遞歸的條件
if left > right{
return…
}
二分查找的代碼實現

package main import "fmt"//二分查找的函數 /* arr = [1,8,10,89,1000,1234] 8 二分查找的思路:比如要查找的數是key 1.arr是一個有序數組,并且是從小到大排序 2.先找到中間的下標mid=(leftl+right)/2,然后讓中間下標的值和key進行比較 1)如果arr[mid] >key,就應該向left ----(mid-1) 2)如果arr[mid]<key,就應該向mid+1---- right 3)如果arr[mid] == key,就找到 4) 上面的1).2).3)的邏輯會遞歸執行 3.分析退出遞歸的條件 if left > right{return.. } */func BinaryFind(arr *[6]int, left int, right int, key int){// 判斷是否left>rightif left > right{fmt.Println("沒找到")return}// 先找到 中間的下標mid := (left + right) / 2if key > (*arr)[mid]{// 說明要查找的數在mid+1 --- rightBinaryFind(arr, mid+1, right, key)}else if key < (*arr)[mid]{// 說明要查找的數在left --- mid-1BinaryFind(arr, left, mid-1, key)}else{// 找到了fmt.Printf("找到了,下標為%v\n",mid)} }func main(){arr := [6]int{1,8,10,89,1000,1234}// 測試一下BinaryFind(&arr, 0, len(arr)-1, 8) }

總結

以上是生活随笔為你收集整理的【Golang】查找-学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。