2017-06-13 2 views
-3
def bubble_sort(array) 
    swaps = 0; 
    i = 0; 
    last = array.length - 1 

    while swaps > -1 
     if i == last 
      i = 0 
      last-- 
      swaps = 0 

      if swaps < 1 
       swaps = -1 
      end 
     end 

     if array[i] > array[i+1] 
      temp = array[i] 
      array[i] = array[i+1] 
      array[i+1] = temp 
      swaps++ 
     end 
     i++ 
    end 
end 

Was ist falsch an diesem Code? Keine logischen Fehler, aber ich bekomme diese syntaktischen Fehler und kann nicht herausfinden warum.Ruby If Anweisungen

bubble_sort.rb: 22: Syntaxfehler, unerwartete keyword_end

bubble_sort.rb: 26: Syntaxfehler, unerwartete keyword_end

+3

Ihr Einzug ist falsch. Behebe das und das Problem wird deutlicher. Als Anmerkung ist 'i ++' und 'i -' ** nicht ** gültiger Ruby, da er nicht '++' oder '-' hat. Sie sollten auch vermeiden, sinnlose ';' Trennzeichen einzufügen. – tadman

+0

Was ist das "Ende" nach dem ersten Codeblock? –

+0

Es ist für die Funktion, die nicht richtig eingerückt ist. – ifconfig

Antwort

0

Ihr Code mit der richtigen Rubin Syntax wie folgt aussehen.

def bubble_sort(array) 
    swaps = 0 
    i = 0 
    last = array.length - 1 

    while swaps > -1 
     if i == last 
      i = 0 
      last -= 1 
      swaps = 0 

      if swaps < 1 
       swaps = -1 
      end 
     end 

     if array[i] > array[i+1] 
      temp = array[i] 
      array[i] = array[i+1] 
      array[i+1] = temp 
      swaps += 1 
     end 
     i += 1 
    end 
end 

Ich habe nicht versucht, Ihre Logik zu ändern. Nur die Syntax wurde geändert. Und ich denke, du solltest am Ende Array zurückgeben. Andernfalls wird die Ausgabe Null sein. Hoffe, das hilft

0

Dies gilt nicht, Ruby-Syntax:

i++ 

Ändern Sie es an:

swaps++ 

Um dies:

i += 1 

Und dies ändern

swaps += 1