冒泡排序
冒泡排序的核心想法是将最大的先固定出来,然后进行下一轮,不断的确定最大的数,最后使排序完成
其实现可以使用多个for循环即可
for i := 0 ; i < 3 ; i++{
if (*arr)[i] > (*arr)[i+1]{
tump = (*arr)[i]
(*arr)[i] = (*arr)[i+1]
(*arr)[i+1] = tump
}
}
fmt.Println("第2次排序",*arr)
for i := 0 ; i < 2 ; i++{
if (*arr)[i] > (*arr)[i+1]{
tump = (*arr)[i]
(*arr)[i] = (*arr)[i+1]
(*arr)[i+1] = tump
一直写下去即可,但是不是很方便,所以可以以一个为内循环,多个合并为外循环。
package main
import "fmt"
func PupScout(arr *[5]int){
fmt.Println(*arr)
for i := 0; i < len(*arr) - 1 ; i++ { //一共几次循环
for j := 0 ; j < len(*arr) - 1 - i ;j ++{ //每次训环几次
if arr[i] > arr[i+1]{
arr[i],arr[i+1] = arr[i+1],arr[i] //交换最大值
}
}
}
fmt.Println(*arr)
}
func main(){
arr := [5]int{15,20,35,36,70}
PupScout(&arr)
}
顺序查找
第一种方式
使用for循环遍历对比
package main
import "fmt"
func main() {
names := [4]string{"阿斯顿","儿童舞","梵蒂冈","哈哈"}
var name = ""
fmt.Println("输入人名")
fmt.Scanln(&name)
for i:=0 ; i < len(names);i++{
if name == names[i] {
fmt.Printf("找到%v \n",name)
break
} else if i == len(names) -1 { //如果最后一次了 就没找到
fmt.Println("没找到")
}
}
}
第二种方式
使用下标
package main
import "fmt"
func main() {
names := [4]string{"阿斯顿","儿童舞","梵蒂冈","哈哈"}
var name = ""
fmt.Println("输入人名")
fmt.Scanln(&name)
index := -1 //先给index赋值
for i:=0 ; i < len(names);i++{
if name == names[i] {
index = i //如果找到就该index为下标
break
}
}
if index != -1 {
fmt.Printf("找到%v \n",name)
}else {
fmt.Printf("没找到%v \n",name)
}
}
二分查找
其核心思想就是将一个数组分两半,不断的分,不断的逼近导致最后达到条件的数越来越少就找到了。
package main
import "fmt"
//定义函数数组左右下标和需要找到的数
func BainaryFind(arr *[6]int,leftIndex int,rightIndex int, findVal int) {
//下标左大于又了就出错了 就一定找不到
if leftIndex> rightIndex {
fmt.Println("找不到")
return
}
middle := (leftIndex + rightIndex)/2
if (*arr)[middle] > findVal{
BainaryFind(arr,leftIndex,middle-1,findVal)
}else if (*arr)[middle] < findVal {
BainaryFind(arr,middle+1,rightIndex,findVal)
}else {
fmt.Printf("找到了下标为%v",middle)
}
}
func main() {
arr := [6]int{1,8,10,89,1000,1234}
BainaryFind(&arr,0,len(arr)-1,89)
}