gpt4 book ai didi

sorting - Julia 合并排序实现无法正常工作

转载 作者:行者123 更新时间:2023-12-05 00:11:54 26 4
gpt4 key购买 nike

我不太确定为什么我的合并排序实现不起作用。

merge_sort 将数组 A 以及起始和最终索引 p 和 r 作为参数。如果我尝试在 A = [1, 64, 64, 315, 14, 2, 3, 4, 5] 上运行 merge_sort(A, 1, 9), A 将变成 A = [1, 1, 1, 1, 1, 2, 2, 4, 5]。我正在尝试使用哨兵来检测 L 和 R 阵列是否已耗尽。

这是代码:

function merge_sort(A, p, r)
if p < r
q = floor(Int, (p+r)/2)
merge_sort(A, p, q)
merge_sort(A, q+1, r)
merge(A, p, q, r)
end
end



function merge(A, p, q, r)
n1 = q-p+1
n2 = r-q
L = []
R = []

for i = 1:n1
push!(L, A[p+1-1])
end

for j = 1:n2
push!(R, A[q+j])
end

sentinel = 123456789
push!(L, sentinel)
push!(R, sentinel)
i=1
j=1

for k=p:r
if L[i] <= R[j]
A[k] = L[i]
i = i+1
else
A[k] = R[j]
j = j+1

end
end
end

最佳答案

您在 push!(L, A[p+1-1]) 中输入错误应该是 push!(L, A[p+i-1]) .

这是您的代码的一些清理版本(但我没有尝试完全优化它以保留您的逻辑):

function merge_sort!(A, p = 1, r = length(A))
if p < r
q = div(p+r, 2)
merge_sort!(A, p, q)
merge_sort!(A, q+1, r)
merge!(A, p, q, r)
end
A
end

function merge!(A, p, q, r)
sentinel = typemax(eltype(A))
L = A[p:q]
R = A[(q+1):r]
push!(L, sentinel)
push!(R, sentinel)
i, j = 1, 1
for k in p:r
if L[i] <= R[j]
A[k] = L[i]
i += 1
else
A[k] = R[j]
j += 1
end
end
end

关于sorting - Julia 合并排序实现无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52429659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com