golang(7)排序和查找

本文深入探讨了冒泡排序算法的实现原理,通过具体的Go语言代码示例展示了如何通过多次循环确定最大值并完成排序过程。同时,文章还介绍了顺序查找和二分查找的两种不同实现方法,以及它们在效率上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序

冒泡排序的核心想法是将最大的先固定出来,然后进行下一轮,不断的确定最大的数,最后使排序完成

其实现可以使用多个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)

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值