8-Go基础:Map与排序算法

一、冒泡排序

  • 冒泡排序算法
    • ①.从切片头部开始,不断比较相邻的两个元素的大小,让较大的元素逐渐往后移动(交换两个元素的值),直到切片的末尾。经过第一轮的比较,就可以找到最大的元素,并将它移动到最后一个位置
    • ②.第一轮结束后,继续第二轮。仍然从切片头部开始比较,让较大的元素逐渐往后移动,直到切片的倒数第二个元素为止。经过第二轮的比较,就可以找到次大的元素,并将它放到倒数第二个位置
    • ③.以此类推,进行 n-1(n 为切片长度)轮“冒泡”后,就可以将所有的元素都排列好

在这里插入图片描述

func main() {
	s := []int{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
	var temp int
	for i := 0; i < len(s)-1; i++ {
		for j := 0; j < len(s)-1-i; j++ {
			if s[j] > s[j+1] {
				temp = s[j]
				s[j] = s[j+1]
				s[j+1] = temp
			}
		}
	}
	fmt.Println(s)
}

二、选择排序

  • 选择排序算法
    • ①.第一趟排序在所有待排序的n个记录中选出关键字最小的记录,将它与数据表中的第一个记录交换位置,使关键字最小的记录处于数据表的最前端;
    • ②.第二趟在剩下的n-1个记录中再选出关键字最小的记录,将其与数据表中的第二个记录交换位置,使关键字次小的记录处于数据表的第二个位置;
    • ③.重复这样的操作,依次选出数据表中关键字第三小、第四小…的元素,将它们分别换到数据表的第三、第四…个位置上。排序共进行n-1趟,最终可实现数据表的升序排列

在这里插入图片描述

func main() {
	// 考虑第一趟的情况
	// 1;找出切片中最小的数据。
	// 2: 和切片中第一个数进行位置的交换。
	s := []int{5, 9, 0, 2, 7}
	for j := 0; j < len(s)-1; j++ {
		min := s[j]
		minIndex := j
		for i := j + 1; i < len(s); i++ {
			if min > s[i] {
				min = s[i]
				minIndex = i
			}
		}
		if minIndex != j {
			s[j], s[minIndex] = s[minIndex], s[j]
		}
	}
	fmt.Println(s)
}

三、map简介

  • map概念
    • map 是一种无序的键值对的集合;
    • map的键是不允许重复的;
    • map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值

四、map创建与初始化

  • map创建方式
    • var map名字 map[键的类型]值的类型
    • map名字 := map[键的类型]值的类型{ }
    • make(map[键的类型]值的类型)
func main() {
	var m map[int]string = map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "itcast"} // key是唯一的。
	m1 := map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "itcast"}
	m2 := make(map[string]int, 10)
	m2["张三"] = 12
	m2["李四"] = 15
	m2["张三"] = 16 //完成数据的修改。
	fmt.Println(m)
	fmt.Println(m1)
	fmt.Println(len(m2)) // len()返回的是map中已有的键值对个数。
	fmt.Println(m2)
}

五、map键与值

  • 通过key获取值:map名字[键]
  • 通过key获取值时,判断是否存在:变量1,变量2 := map名字[键];如果键是存在的”变量1”中存储对应的值,并”变量2”的值为true,否则为false
  • 通过循环方式获取值:通过for…range方式进行遍历
  • ** 通过key删除某个值**:delete(map名字,键)
func main() {
	var m map[int]string = map[int]string{1: "王五", 2: "李四"}
	fmt.Println(m[2]) // 李四

	value, ok := m[6]
	if ok {
		fmt.Println(value)
	} else {
		fmt.Println(value)
		fmt.Println("不存在")
	}
	
	for key, value := range m {
		fmt.Println(key)
		fmt.Println(value)
	}

	delete(m, 2)
	fmt.Println(m)
}

六、map作为函数参数

  • map作为函数参数:在函数中修改map的值,会影响到原map
func main() {
	var m map[int]string = map[int]string{1: "张三", 2: "李四"}
	DeleteMap(m)
	PrintMap(m)

}
func PrintMap(m map[int]string) {
	for key, value := range m {
		fmt.Println(key)
		fmt.Println(value)
	}
}
func DeleteMap(m map[int]string) {
	delete(m, 2)
}
  • 案例:统计英文字符串中每个字母出现的次数
func main() {
	//有一个英文字符串 统计每个字母出现的次数
	var str string = "helloworld"
	// 1;循环整个字符串,取出每个字母
	m := make(map[byte]int)
	for i := 0; i < len(str); i++ {
		ch := str[i] // ch='h' ch='e' ch='l' ch='l'
		m[ch] = m[ch] + 1 // 默认int为0
	}
	// 2;统计
	// 3:输出结果
	// h 1
	// e 1
	// l 3
	for key, value := range m {
		fmt.Printf("%c:%d\n", key, value)
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无休止符

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值