以下是更新后的代码:
def insertion_sort(list)
num = list.length
for i in (0..(num-2))
if list[i] > list[i+1] && i == 0
list[i], list[i+1] = list[i+1], list[i]
i+=1
elsif list[i] == list[i+1]
i+=1
elsif list[i] > list[i+1] && i > 0
len = (list[0..(i+1)].length)
list2 = list[0..(i+1)]
list = list - list2
count = 0
while count <= len+1
if list2[len-1] < list2[len-2]
list2[len-2],list2[len-1]= list2[len-1],list2[len-2]
elsif list2[len-1] == list2[len-2]
count+=1
len-=len
else
count+=1
len-=1
end
end
list = list2 + list
end
end
list
end
p insertion_sort([2,1,4,8,7,3,100,99,8])
p insertion_sort([2,1,4,8,8,7,3,100,99])
p insertion_sort([3790,780,780,1,55])
概括:
- 如果两个相同的整数彼此相邻,则代码有效:[2,1,4,8,8,7,3,100,99] 并且数组大小> 5。
- 如果两个相同的整数在随机位置:[2,1,4,8,7,3,100,99,8]。以下错误会发生 aaa.rb:4:in `>': 整数与 nil 的比较失败 (ArgumentError)
第 4 行代码为: if list[i] > list[i+1] && i == 0
解决 1. 我将 while 循环更改为“while count <= len+1”,因此当数组大小小于 5 时,代码将起作用。但当相同的整数位于随机位置时则不然。
有谁知道如何解决这个问题?提前致谢!