func merge(nums1 []int, m int, nums2 []int, n int) {
gap := int((int(m+n)/2) + ((m+n) % 2))
for ;gap > 0;{
i := 0
for ;i+gap < m;i++ {
if nums1[i] > nums1[i+gap]{
nums1[i],nums1[i+gap] = nums1[i+gap],nums1[i]
}
}
j := 0
if gap > m{
j = gap-m
}
for ;i < m && j < n;{
if nums1[i] > nums2[j]{
nums1[i],nums2[j] = nums2[j],nums1[i]
}
i++
j++
}
if j < n{
j = 0
for ;j+gap < n;j++{
if nums2[j] > nums2[j+gap]{
nums2[j],nums2[j+gap] = nums2[j+gap],nums2[j]
}
}
}
gap = gapFn(gap)
}
i := m
for _, num := range nums2{
nums1[i] = num
i++
}
}
func gapFn(prevGap int) int {
if prevGap <= 1{
return 0
}
return int(int(prevGap / 2) + (prevGap % 2))
}