예제 #1
0
파일: mergesort.go 프로젝트: yikliu/golib
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)
}