2022-4-29 实习Day27

1、bugFix4-28测试问题检验测试解决。 –3小时 90%
2、汇款业务-行内汇款测试文档编写完毕。–3小时 100%

Golang编程学习(part 22)

1、排序的基本介绍:排序是将一组数据, 依指定的顺序进行排列的过程

① 内部排序
指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择式排序法、插入式排序法)
② 外部排序
数据量过大, 无法全部加载到内存中, 需要借助外部存储进行排序。包括(合并排序法 和 直接合并排序法)

2、冒泡排序分析

冒泡排序的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就像水底下的气泡一样逐渐向上冒。
因为排序过程中,个元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较(优化)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import "fmt"

func main() {
ints := [10]int{1, 25, 4, 11, 26, 3, 7, 19, 20, 46}
for i := 0; i < len(ints)-1; i++ {
for j := 0; j < len(ints)-i-1; j++ {
if ints[j] > ints[j+1] {
ints[j], ints[j+1] = ints[j+1], ints[j]
}
}
}
fmt.Println(ints)
}

3、查找(顺序查找、二分法查找)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 顺序查找
index := -1
for i := 0; i < len(names); i++ {
if heroName == names[i]{
index = i // 将找到的值对应的下标赋值给 index
break
}
}

if index != -1 {
fmt.Printf("找到%v, 下标%v \n", heroName, index)
} else {
fmt.Printf("没有找到", heroName)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 二分法查找
package main

import "fmt"

func main() {
ints := []int{1, 8, 16, 24, 30, 70}
BinaryFind(ints, 0, len(ints)-1, 8)
}

func BinaryFind(slice []int, leftIndex int, rightIndex int, findVal int) {
middle := (leftIndex + rightIndex) / 2

// 判断leftIndex是否大于rightIndex
if leftIndex > rightIndex {
fmt.Println("找不到")
return
}

if findVal < slice[middle] {
BinaryFind(slice, leftIndex, middle-1, findVal)
} else if findVal > slice[middle] {
BinaryFind(slice, middle+1, rightIndex, findVal)
} else {
fmt.Printf("找到了,下标为%v", middle)
}
}