Ich verstehe, dass Sie lernen, Rubin und wollen um deine eigene Blasensorte zu implementieren. a.sort ist einfach, lehrt aber nichts. Ich bin froh, dass du gerade lernst! Es gibt einen Fehler in Ihrer Blasensortierungsmethode. Sie erhöhen i und verwenden es als Index für Ihr Array bei jeder Iteration. Es könnte viele Iterationen dauern, um im schlimmsten Fall dauert es n ** 2 (n Quadrat) Iterationen, die deutlich mehr als die Elemente in Ihrem Array sein wird. Wenn Ihr Code jedoch so funktioniert hat, wie ich es erwartet habe, würde er nur einen Durchlauf auf dem Array machen.
Dies ist eine klassische Rubin-Blase Sorte. (mit dem Sie den Benutzer füllen das Array von der Konsole) Beachten Sie, dass wir das gesamte Array weiter verarbeiten, bis wir keine Werte mehr tauschen müssen.
def bubble_sort(array)
n = array.length
puts "Sorting your array of #{n} items"
loop do #will loop forever till we break
#When we go through the entire array
#and don't have to swap then the array
#is sorted
swapped = false
(n-1).times do |i|
print "*" #just to illustrate how many iterations occur
if array[i] > array[i+1]
array[i], array[i+1] = array[i+1], array[i] #swap these values, no pesky temp variable
swapped = true
end
end
break if not swapped #we are done exit the loop
end
array #return the sorted array
end
puts "Amount of elements in your array"
n = gets.chomp.to_i
a = []
n.times do |num|
puts "input your element #{num}"
a <<gets.chomp.to_i
end
puts a
a = bubble_sort(a)
puts "Array sorted #{a}"
Hier ist ein Beispiel dafür über eine Konsole
Cyclops% ruby sort_test.rb
Amount of elements in your array
6
input your element 0
5465463
input your element 1
3421
input your element 2
432143
input your element 3
234123
input your element 4
645
input your element 5
1
5465463
3421
432143
234123
645
1
Sorting your array of 6 items
******************************
Array sorted [1, 645, 3421, 234123, 432143, 5465463]
Cyclops%
In Ihrer while-Schleife Sie 'Temp haben wird, laufen = a [i]' gefolgt von 'a [i] = temp' das zu erreichen, ist nichts. Ich denke du willst 'temp = a [i + 1]' 'a [i + 1] = a [i]' 'a [i] = temp' oder, in mehr idiomatischem Rubin,' a [i + 1], a [i] = a [i], a [i + 1] '. – GSP
Yep, ich erkannte, dass nachdem ich um Hilfe gebeten XD. –