我完全理解冒泡排序的工作原理。我刚接到编码练习,我必须创建一个方法,将猴子修补到Array类,其中使用了一段代码并且它有太空船操作符。以下是我的代码:
class Array
def bubble_sort!
len = self.length - 1
loop do
swapped = false
for i in 0...len
if self[i] > self[i + 1]
self[i], self[i + 1] = self[i + 1], self[i]
swapped = true
end
end
break if swapped == false
end
self
end
# def bubble_sort(&prc)
# end
end
这是我的bubble_sort!
方法,但我不知道如何用太空飞船操作员写这个方法。在块内使用<=>
。练习要求我能够将块{|num1,num2| num1 <=> num2}
升序和{|num1,num2| num2 <=> num1}
降序传递给方法。我在调用块时没有问题,我确实理解了宇宙飞船运营商如何比较变量< == -1
,= == 0
和> == 1
。我唯一的问题是我不知道如何将其写入泡沫排序的实际条件语句中。
答案 0 :(得分:1)
代码中比较元素的行就是这一行:
if self[i] > self[i + 1]
使用此逻辑,如果第一个元素高于第二个元素,则交换,这意味着您的结果将按升序排序。
您可以按如下方式替换它:
if prc.call(self[i], self[i + 1]) == 1
然后像这样调用方法:
print [5,1,4,2,3].bubble_sort! { |a,b| a <=> b }
# => [1,2,3,4,5]
print [5,1,4,2,3].bubble_sort! { |a,b| b <=> a }
# => [5,4,3,2,1]
答案 1 :(得分:0)
尝试以下方法:
# ....
for i in 0...len
condition =
if block_given?
yield(self[i], self[i + 1]).positive?
else
self[i] > self[i + 1]
end
if condition
self[i], self[i + 1] = self[i + 1], self[i]
swapped = true
end
end
# ....
# Usage:
my_array.bubble_sort!
my_array.bubble_sort! { |num1, num2| num1 <=> num2 }