Search code examples
arraysrubysortingbubble-sort

Need help understanding syntax/logic in Ruby bubble sort solution


I need help understanding some of the syntax and logic in this programming solution.

def bubble_sort(arr)
  sorted = false
  until sorted
    sorted = true
    (arr.count - 1).times do |i|
      if arr[i] > arr[i + 1]
        arr[i], arr[i + 1] = arr[i + 1], arr[i]
        sorted = false
      end
    end
  end

  arr
end

Specifically, I had some trouble understanding the part with the until loop and the sorted = true and sorted = false. I did some reading on here and I think I get that if changes need to be made to the array still, sorted gets set to false and the loop continues. But I'd be appreciated if someone could explain this to me simply one more time.

It looks like the times loop only executes once for each array element minus one and then swaps the positions. How does the until loop play into this?


Solution

  • The .times loop does a single pass over the array, comparing each element with its neighbor and swapping them if they're in the wrong order.

    The outer until sorted loop repeats this process until nothing changes anymore. At this point the array is sorted.

    The sorted variable records whether we swapped any elements during our last pass over the array. If we did, the array changed and we're not done yet. On the other hand, if no elements were swapped, sorted = false is not executed, sorted remains true, and we can exit the outer loop.