func insert(num int, arr *[]int) {
insertIndex := len(*arr)
for i := 0; i < len(*arr); i++ {
if (*arr)[i] >= num {
insertIndex = i
break
}
}
*arr = append((*arr)[:insertIndex], append([]int{num}, (*arr)[insertIndex:]...)...)
}
func main() {
arr := []int{1, 2, 3, 5, 6, 8, 9}
var num int
fmt.Println("请输入要插入的数字:")
fmt.Scanf("%d", &num)
insert(num, &arr)
fmt.Println(arr)
}
步骤
- 找到新元素应该插入的位置。遍历数组,找到第一个大于新元素的位置。
- 在找到的位置之前插入新元素。可以使用
append
函数来实现。将数组分为两部分,前半部分是找到位置之前的元素,后半部分是从找到位置开始的元素。然后将新元素插入到数组中。 - 打印插入新元素后的数组。
关键语句:*arr = append((*arr)[:insertIndex], append([]int{num}, (*arr)[insertIndex:]...)...)
(*arr)[:insertIndex]
:这部分代码表示切片arr
中插入位置之前的部分。它会截取从切片开头到插入位置之前的所有元素。[]int{num}
:这部分代码创建一个只包含新元素num
的切片。(*arr)[insertIndex:]
:这部分代码表示切片arr
中插入位置之后的部分。它会截取从插入位置开始到切片末尾的所有元素。append(...)
:这个函数调用会将上述三个部分进行组合。它会先将新元素切片[]int{num}
追加到插入位置之前的部分(*arr)[:insertIndex]
,然后再将插入位置之后的部分(*arr)[insertIndex:]
追加到结果中,最终返回一个合并后的切片。*arr = append(...)
:这个赋值语句会将上述得到的合并后的切片重新赋值给原始切片arr
,从而实现在指定位置插入新元素的操作。
结果