0
点赞
收藏
分享

微信扫一扫

Golang——排序和查找

冒泡排序

在这里插入图片描述

//冒泡排序(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
}
举报

相关推荐

0 条评论