Merge 2 sorted arrays in Golang
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))
}
Comments (0)