我正在尝试进行数组练习问题,而且我现在正在进行插入排序。我想知道这段代码是否清晰可读。对我来说,这看起来有点令人困惑,如果有人有更清洁的方式(更容易理解)来实现这个,你可以帮我吗?
def insertion_sort(arr)
(1...arr.length).each do |i| #iterate through array go through every element
j=i-1 #to check all elements behind i
while(j>=0&&arr[i]<arr[j]) #while not out bounds and current element is less than previous
temp=arr[i] #3 lines to switch arr[i] and arr[j]
arr[i]=arr[j]
arr[j]=temp
i=j #keep track of where i is
j-=1 #decrease j by 1 to check the previous element
end
end
return arr
end
答案 0 :(得分:1)
这在ruby中不是必需的:
temp=arr[i] #3 lines to switch arr[i] and arr[j]
arr[i]=arr[j]
arr[j]=temp
因为你可以做这样的多项任务:
a,b = 1,2
与:
相同a = 1
b = 2
这意味着你可以像这样切换变量值:
a,b = b,a
或在你的情况下:
arr[i],arr[j] = arr[j],arr[i]
答案 1 :(得分:0)
这可能有它自己的问题,但你可以在这里看到一些简化希望使代码更具可读性。
class Array
def swap(a, b)
self[a], self[b] = self[b], self[a]
end
end
def insertion_sort(arr)
(1...arr.size).each do |i|
i.downto(1).each do |j|
break if arr[j] >= arr[j - 1]
arr.swap(j, j - 1)
end
end
arr
end
答案 2 :(得分:0)
在ruby中轻松实现插入排序。
def insertion(arr)
for i in (1...(arr.size))
if arr[i-1] > arr[i]
i.downto(1) do |el|
if arr[el] < arr[el-1]
arr[el-1], arr[el] = arr[el], arr[el-1]
end
end
end
end
arr
end
arr = %w(3 7 4 9 5 2 6 1 0)
p insertion(arr)