所以我试图使用交换方法创建一个简单的排序程序,我只是不能让它正常工作。代码似乎很稳定,直到它到达朝鲜蓟为止。在每次迭代过程中,我都经历了“放置”数组的价值,梨与苹果交换,然后与橙子交换,然后与桃子和葡萄柚交换,但当它到达朝鲜蓟时,它拒绝像它应该交换。它似乎也不是它的问题,它是列表中的最后一项,因为如果我添加,让我们说,香蕉到最后它仍然停在朝鲜蓟。最终我想将函数嵌套在'm.times do'函数中以继续交换,直到整个列表被排序,但出于某种原因我放
m.times do
end
围绕'n.times do'它会产生另一个错误。但我想如果我甚至不能让朝鲜蓟与梨交换也没关系。以下是我的代码(是的,我知道有一个.sort函数,这是出于学习目的)。
## Ignore this part, it is just a function I made and commented out to create
## your own list.
=begin
array = []
while true
puts "what item would you like to add to your list to be sorted?"
puts "press enter without entering an item to quit"
item = gets.chomp
break if item.empty?
array.push item
end
=end
##
array = ['pear' , 'apple' , 'orange' , 'peach' , 'grapefruit' , 'artichoke']
i = 0
m = array.length
n = m - 1
n.times do
if array.to_s[i] >= array.to_s[i+1]
swap = array[i]
array[i] = array[i+1]
array[i+1] = swap
end
i += 1
end
puts array
答案 0 :(得分:0)
我认为你的意思是array[i] >= array[i+1]
array.to_s
将从整个数组中创建一个字符串,因此您在字符串化数组中一次比较一个字符,而不是一次比较一个字,就像您打算这样做。
答案 1 :(得分:0)
array = ['pear' , 'apple' , 'orange' , 'peach' , 'grapefruit' , 'artichoke']
m = array.length
n = m - 1
n.times do
i = 0
n.times do
if array[i] >= array[i+1]
temp = array[i]
array[i] = array[i+1]
array[i+1] = temp
end
i += 1
end
end
puts array
在这种称为“冒泡排序”的排序方法中,您需要嵌套循环。在一次运行后,只保证最顶层的元素处于正确的位置。这也被称为这种不良算法的臭名昭着的O(n * n)复杂性。顺便说一句。内循环可以更短,如n-i
次。
修正了一些错误:
array.to_s[i]
错误,因为索引必须应用于数组,而不是to_s
方法to_s
,因为此特定数组的元素已经是字符串i = 0
必须移至外圈的开始