正如問題所述,我無法找到以下算法中問題的位置。它是mergesort的aux函數,即用於組合排序數組的一個函數。以下合併排序算法有什麼問題?
func Merge(toSort *[]int, p, q, r int) {
arr := *toSort
L := arr[p:q]
R := arr[q:r+1]
fmt.Println(L)
fmt.Println(R)
i := 0
j := 0
for index := p; index <= r; index++ {
if i >= len(L) {
arr[index] = R[j]
j += 1
continue
} else if j >= len(R) {
arr[index] = L[i]
i += 1
continue
}
if L[i] > R[j] {
fmt.Println("right smaller")
arr[index] = R[j]
j += 1
continue
}
if L[i] <= R[j] {
fmt.Println("left smaller")
arr[index] = L[i]
i += 1
continue
}
}
}
對於arr := []int{1,7,14,15,44,65,79,2,3,6,55,70}
它給作爲輸出[1 2 2 2 2 2 2 2 3 6 55 70]
。
中的JavaScript相當於該功能正常工作,但我不知道爲什麼它不在Go
工作謝謝
謝謝。我知道我在使用該語言時做錯了什麼,因爲js vesion工作得很好。雖然,據我所知,在js中它也是通過引用傳遞的。但我認爲array.splice函數會創建底層數組的副本。 – eAbi