go语言实现经典算法分析

对一个切片进行切片不会复制底层的数组,这意味着切片的子切片只是与原切片共享底层数组的一个视图。因此,如果您想要将它与初始的切片分开需要使用copy()。
对于 append 函数,如果它没有足够的容量来保存新值,底层数组将会重新分配内存和大小。这意味着 append 的结果能不能指向原始数组取决于它的初始容量。这会导致难以发现的不确定 bugs。

func main() {
	aa := []int{5, 4, 3, 2, 1}
	QuickSort(aa, 0, 4)
	fmt.Println(aa)
}

func QuickSort(nums []int, left, right int) { //高效切片排序算法
	val := nums[(left+right)/2] //二分排序法
	fmt.Println(nums)
	i, j := left, right
	for nums[j] > val {//后面的数字大则处理倒数第二个数字...循环处理
		j--
	}
	for nums[i] < val {//前面的数字小则处理第二个数字
		i++
	}
	nums[i], nums[j] = nums[j], nums[i]
	i++
	j--
	if i < right {
		QuickSort(nums, i, right)
	}
	if j > left {
		QuickSort(nums, left, j)
	}
}
func BubbleSort(nums []int){//冒泡排序算法,效率不高,循环层数越低系统
	length := len(nums)
	for i:=1;i<length;i++{
		for j:=0;j<length-1;j++{
			if nums[j]>nums[i] {
				nums[j],nums[i] = nums[i],nums[j]
			}
		}
	}
}
发布了67 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42544051/article/details/102914232
今日推荐