用Ruby实现快速排序

用Ruby实现快速排序,ruby,quicksort,Ruby,Quicksort,我编写了快速排序的代码。我的排序方法出现错误,但我不知道问题出在哪里 def sort (numbers, first, last) if first >= last return end if first < last pivot = first j = first k = last while (j < k) if(numbers[j] >= numbers[pivot]) j +

我编写了快速排序的代码。我的排序方法出现错误,但我不知道问题出在哪里

def sort (numbers, first, last)
if first >= last
    return
end

if first < last 
    pivot = first
    j = first
    k = last

    while (j < k) 
        if(numbers[j] >= numbers[pivot])
            j +=1 
            if(numbers[k] < numbers[pivot]) 
                k -=1 
                if(j <= k) 
                    temp = numbers[j]
                    numbers[j] = numbers[k]
                    numbers[k] = temp
                end
            end
        end
    end
    puts "end loop"
    temp = numbers[pivot]
    numbers[pivot]= numbers[k]
    numbers[k] = temp
    sort(numbers,first,k-1)
    sort(numbers,k+1,last)
end
end

a = [89, 23, 12, 67, 45, 78, 24, 56, 87, 73, 37] 
first = 0

for i in 0...a.length
puts a[i]
end

last = a.length - 1
puts "Array Count is #{last}"

sort(a, 0, last)

for i in 0...a.length
puts a[i]
end
def排序(数字、第一个、最后一个)
如果第一个>=最后一个
返回
结束
如果第一次<最后一次
枢轴=第一个
j=第一
k=最后一个
while(j=数字[pivot])
j+=1
if(数字[k]<数字[pivot])
k-=1

如果(j首先,您的代码在我的计算机上运行(使用++运算符修复了一些错误)。您运行文件的方式一定有问题。
其次,代码看起来不像Ruby代码(比如Ruby没有++操作符)。请查看我的示例实现-

开始时,将
j++
替换为
j++=1
并将
k--
替换为
k-=1
。我怀疑您的子列表中有一个子列表是空的,当k为1或列表长度时会出现这种情况。请给出错误的全文,包括行号和回溯。我从中了解的所有信息s是您试图添加到nil值的某个地方。也请尝试提供。请将
j++
k--
更改为@TJ注释,重新运行代码,如果仍然有错误,请编辑您的问题以反映更新的信息。当您报告异常时,请同时指出发生异常的行。如果我是您,我会删除这个问题,进行更改,然后取消删除。我将j++替换为j+=1,将其替换为k,但当我在“数组计数为10”之后运行它时它进入挂起状态。我必须按Ctrl+CHow来终止程序。考虑到它包含
j++
k--
?这应该是一个注释,而不是一个答案。我用j++=1替换了j++并用k替换了它,但当我在“数组计数为10”之后运行它时,代码是否可以在您的计算机上运行它进入挂起状态。我必须按Ctrl+C终止程序