8.1 排序
8.1.1 排序的介绍
排序的分类:
-
内部排序:将需要处理的所有数据都加载到内部存储器中进行排序,包括交换式排序法、选择式排序法和插入式排序法。
-
外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序,包括合并排序法和直接合并排序法。
8.1.2 冒泡排序
package main
import "fmt"
func BubbleSort(arr *[5]int){ //数组是值类型,如果要修改数组需要使用指针来接收
fmt.Println("排序前 arr = ", *arr)
temp := 0
for i := 0; i < len(arr) - 1; i++ {
for j := 0; j < len(arr) - 1; j++ {
if arr[j] > arr[j+1] {
temp = (arr)[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
fmt.Println("排序后 arr = ", (*arr))
}
func main() {
arr := [5]int{45,9,-2,99,0}
BubbleSort(&arr)
fmt.Println("main arr = ", arr)
}
8.2 查找
8.2.1 二分查找
package main
import "fmt"
func BinaryFind(arr *[6]int, leftIndex int, rightIndex int, findVal int){
if leftIndex > rightIndex {
fmt.Println("找不到")
return
}
middle := leftIndex + (rightIndex - leftIndex)/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, 5, 10,89, 1000, 1234}
BinaryFind(&arr, 0, len(arr)-1, -5)
}
8.3 二维数组
8.3.1 使用方式
-
方式1:先声明/定义,再赋值
-
语法:
var 数组名 [大小][大小]类型
-
内存布局:
-
var arr [2][3]int
arr[1][1] = 10
fmt.Println(arr) //[[0 0 0] [0 10 0]]
fmt.Printf("arr[0]的地址%p\n", &arr[0]) //arr[0]的地址0xc000120030
fmt.Printf("arr[1]的地址%p\n", &arr[1]) //arr[1]的地址0xc000120048
fmt.Printf("arr[0][0]的地址%p\n", &arr[0][0]) //arr[0][0]的地址0xc000120030
fmt.Printf("arr[1][0的地址%p\n", &arr[1][0]) //arr[1][0的地址0xc000120048
-
方式2:直接初始化
-
var 数组名 [大小][大小]类型 = [大小][大小]类型{{初始值..}, {初始值..}}
-
var 数组名 [大小][大小]类型 = [...][大小]类型{{初始值..}, {初始值..}}
-
var 数组名 = [大小][大小]类型{{初始值..}, {初始值..}}
-
var 数组名 = [...][大小]类型{{初始值..}, {初始值..}}
-
8.3.2 二维数组的遍历
-
双层for循环完成遍历
-
for-range完成遍历
for i, v := range arr {
for j, v2 := range v {
fmt.Printf("arr[%v][%v]=%v \t", i, j, v2)
}
fmt.Println()
}