- 一、冒泡排序
- 二、选择排序
- 三、map简介
- 四、map创建与初始化
- 五、map键与值
- 六、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创建方式
- 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条)