func Merge(arr *array.List, left int, mid int, right int) { i := left j := mid + 1 t := 0 temp := make([]interface{}, right-left+1) for i <= mid && j <= right { res, err := arr.Compare(i, j) if err != nil { panic(fmt.Sprintf("error in compare: %v, index i: %d, index j: %d", err.Error(), i, j)) } if res < 0 { temp[t], _ = arr.Get(i) i += 1 } else { temp[t], _ = arr.Get(j) j += 1 } t += 1 } for i <= mid { temp[t], _ = arr.Get(i) i += 1 t += 1 } for j <= right { temp[t], _ = arr.Get(j) j += 1 t += 1 } arr.CopyRange(left, temp) }