Ruby 返回到最后位置的数组迭代
我试图对数组进行排序。我知道我可以使用Ruby 返回到最后位置的数组迭代,ruby,arrays,Ruby,Arrays,我试图对数组进行排序。我知道我可以使用排序依据,但我试图自己实现它。代码如下: def insertionSort(ar) for i in 1..ar.length - 1 j = i k = j - 1 while ar[j] < ar[k] && j != 0 do temp = ar[k] ar[k] = ar[j] ar[j] = temp k -= 1 j -= 1
排序依据
,但我试图自己实现它。代码如下:
def insertionSort(ar)
for i in 1..ar.length - 1
j = i
k = j - 1
while ar[j] < ar[k] && j != 0 do
temp = ar[k]
ar[k] = ar[j]
ar[j] = temp
k -= 1
j -= 1
end
puts ar.join(" ")
end
end
def insertionSort(ar)
对于1..ar.length-1中的i
j=i
k=j-1
而ar[j]
当程序到达第一行并递减时,它返回到最后一个位置,因此while
不会中断。我用中的一个条件解决了这个问题,同时
验证是否是第一个位置
这正常吗?为什么会发生这种情况?数组是否类似于循环列表,当我尝试达到-1位置时,是否使用最后一个位置?否,Ruby中的数组(与其他语言一样)不是循环列表
这是糖。负索引相对于数组的结尾。索引-1
表示数组的最后一个元素,-2
表示数组中最后一个元素的下一个元素,依此类推。例如:
arr = ['foo', 'bar', 42, :sym]
arr[-1]
与arr[3]
相同,arr[-2]
与arr[2]
相同,等等
。。。它回到了最后一个位置
当负指数从末尾开始计数时,即,ar[-1]
是最后一个元素
。。。因此,while
不会中断
如果Ruby不允许使用负索引,那么您将得到一个索引器。无论哪种方式,您都需要j!=0
以确保循环在到达第一个元素时中断
下面是另一种编写方法,使用and和循环:
def插入\排序(a)
1.高达(a.size-1)度|
i、 下至(1)do|j|
除非a[j][1,2,3,4,5,6,7,9]
FYI:您可以在不使用temp
变量的情况下交换变量:ar[k],ar[j]=ar[j],ar[k]
我相信您不理解ruby何时使用循环数组。阅读后,将@GaganGami附在他的评论中。
def insertion_sort(a)
1.upto(a.size-1) do |i|
i.downto(1) do |j|
break unless a[j] < a[j-1]
a[j], a[j-1] = a[j-1], a[j]
end
end
end
array = [3, 7, 4, 9, 5, 2, 6, 1]
insertion_sort(array)
array #=> [1, 2, 3, 4, 5, 6, 7, 9]