- 切片使用必须长度检测 len(data)==3 var data=[]int{1,2,3}
- 指针*val 必须判断是否nil val==nil
- 不使用slice传递函数参数,而使用数组
- 在使用加密算法时,不建议使用加密强度较弱的算法 推荐(crypto/rsa,crypto/aes)
//冒泡排序
func BubbleSort(arr []int) {
flag := false
//外层控制行
for i := 0; i < len(arr)-1; i++ {
//内层控制列
for j := 0; j < len(arr)-1-i; j++ {
//比较两个相邻元素
if arr[j] > arr[j+1] {
//交换数据
arr[j], arr[j+1] = arr[j+1], arr[j]
flag = true
}
}
//判断数据是否是有序
if !flag {
return
} else {
flag = false
}
}
}
//选择排序
func SelectSort(arr []int) {
//外层控制行
for i := 0; i < len(arr); i++ {
//记录最大值下标
index := 0
//内层控制列
//遍历数据 查找最大值
for j := 1; j < len(arr)-i; j++ {
if arr[j] > arr[index] {
//记录下标
index = j
}
}
//交换数据
arr[index], arr[len(arr)-1-i] = arr[len(arr)-1-i], arr[index]
}
}
//插入排序
func InsertSort(arr []int) {
for i := 1; i < len(arr); i++ {
//如果当前数据小于有序数据
if arr[i] < arr[i-1] {
j := i - 1
//获取有效数据
temp := arr[i]
//一次比较有序数据
for j >= 0 && arr[j] > temp {
arr[j+1] = arr[j]
j–
}
arr[j+1] = temp
}
}
}
//希尔排序
func ShellSort(arr []int) {
//根据增量(len(arr)/2)每次变成上一次的1/2
for inc := len(arr) / 2; inc > 0; inc /= 2 {
for i := inc; i < len(arr); i++ {
temp := arr[i]
//根据增量从数据到0进行比较
for j := i - inc; j >= 0; j -= inc {
//满足条件交换数据
if temp < arr[j] {
arr[j], arr[j+inc] = arr[j+inc], arr[j]
} else {
break
}
}
}
}
}
//二分查找
func BinarySearch(arr []int, num int) int {
//定义起始下标
start := 0
//定义结束下标
end := len(arr) - 1
//中间基准值
mid := (start + end) / 2
for i := 0; i < len(arr); i++ {
//基准值为查找值
if num == arr[mid] {
return mid
} else if num > arr[mid] {
//比基准值大 查找右侧
start = mid + 1
} else {
//比基准值小 查找左侧
end = mid - 1
}
//再次设置中间基准值位置
mid = (start + end) / 2
}
return -1
}
更新时间:2024-12-05 13:26