RSPEC 2 bubble_sort

Hi guys,

I am stuck on bubble_sort and I can’t seem to figure out why. The program loops continuously but when I compare my answer to the solution, they look virtually identical in theory. Could someone help me out here?

class Array
def bubble_sort!
# if self.empty? || self.length == 1
# return self
# end
sorted = false
while sorted == false
sorted = true

  i = 0
  while i < self.length-1
    current_e = self[i]
    next_e = self[i+1]

    if current_e > next_e
      sorted = false
      current_e, next_e = next_e, current_e


    end

    i += 1
  end
end
self

end

def bubble_sort(&prc)
end
end

The line that now is:
current_e, next_e = next_e, current_e
needs to be:
self[i], self[i+1] = next_e, current_e

Otherwise you’re just endlessly swapping your temporary values current_e and next_e without ever modifying the original array.

Also, not to be schoolmarmish, but comments and tracking statements (I think that’s the right term) can really make your code easier to debug:

class Array
  
  def bubble_sort!
    if self.empty? || self.length == 1
    return self
    end # of edge-case detector
    
  sorted = false
  while sorted == false
    sorted = true
      puts "---"
      
      i = 0
      while i < self.length-1
     
        current_e = self[i]
        next_e = self[i+1]
        puts "#{current_e}   #{next_e}"

    if current_e > next_e
        sorted = false
        self[i], self[i+1] = next_e, current_e
    end # of swapping if-statement
    
      i += 1
      end # of i < self.length-1 loop
    end # of "while sorted" loop
  self # return sorted array
  end # of bubble_sort method
  
end # of class Array definition

test_arr = [7,5,3,1,4,5,6]
test_arr.bubble_sort! # => [1, 3, 4, 5, 5, 6, 7]

Appreciate the response! That does fix the program. I was wracking my mind over why it didn’t work and your fix makes sense to me now.