func merge(data, aux sortable.Interface, start, mid, end int) { i, j := start, mid+1 for k := start; k <= end; k++ { aux.Set(k, data.Get(k)) } for k := start; k <= end; k++ { if i > mid { data.Set(k, aux.Get(j)) j = j + 1 } else if j > end { data.Set(k, aux.Get(i)) i = i + 1 } else if aux.Less(i, j) { data.Set(k, aux.Get(i)) i = i + 1 } else { data.Set(k, aux.Get(j)) j = j + 1 } } }