冒泡排序
//冒泡排序(asc)
package main
import(
"fmt"
)
func main() {
a:=[]int{24,69,80,57,13,24} //注意重复情况
lenth:=len(a)
for i:=0;i<lenth-1;i++{ //最多lenth-1趟
for j:=0;j<lenth-1-i;j++{
if a[j]>a[j+1] {
temp:=a[j]
a[j]=a[j+1]
a[j+1]=temp
}
}
}
fmt.Println(a)
}
顺序查找
较为简单,遍历查询即可,故仅贴出代码
func sequentialSearch1(){//顺序查找:第一种方式
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("没有找到%w\n",heroName)
}
}
}
func sequentialSearch2(){//顺序查找:第二种方式
index :=-1
for i:=0;i<len(names);i++{
if heroName =names[i]{
index=i //将找到的值对应的下标赋给index
break
}
}
if index I=-1{
fmt.Printf("找到%v,下标%v\n",heroName,index)
}else{
fmt.Println("没有找到",heroName)
}
}
func main() {
var choice int
fmt.Scanln("1.顺序查找方法1,2.方法2",&choice)
switch choice{
choice==1:sequentialSearch1()
choice==2:sequentialSearch2()
}
}
二分查找
使用for循环 重复查找过程:
//二分查找
package main
import"fmt"
func main() {
arr:=[6]int{1,8,10,89,1000,1234}
left,right:=0,6
var (
index int
middle int = 3
)
fmt.Println("请输入要查找的数:")
fmt.Scanln(&index)
for i:=0;i<=3;i++{ //一半的次数
if arr[middle]==index{
fmt.Printf("已找到!下标为%v", middle)
return
}else if arr[middle]>index{
right=middle-1
middle=(left+right)/2
}else{
left=middle+1
middle=(left+right)/2
}
if left>right{
fmt.Println("未找到这个数!")
return
}
}
}
以函数的形式使用二分查找,用到了递归的思想:
func BinaryFind(arr *[6]int, leftIndex int, rightIndex int, findVal int) {
//判断 leftIndex 是否大于 rightIndex
if leftIndex > rightIndex {
fmt.Println("找不到")
return
}
//先找到 中间的下标
middle := (leftIndex + rightIndex) / 2
if (*arr)[middle] > findVal {
BinaryFind(arr, leftIndex, middle - 1, findVal)
} else if (*arr)[middle] < findVal {
BinaryFind(arr, middle + 1, rightIndex, findVal)
} else {
fmt.Printf("找到了,下标为%v \n", middle)
}
}
func main() {
arr := [6]int{1,8, 10, 89, 1000, 1234}
BinaryFind(&arr, 0, len(arr) - 1, -6)//test
}