对一个切片进行切片不会复制底层的数组,这意味着切片的子切片只是与原切片共享底层数组的一个视图。因此,如果您想要将它与初始的切片分开需要使用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]
}
}
}
}