55 lines
1.1 KiB
Ruby
55 lines
1.1 KiB
Ruby
# Bubble sort: A very naive sort that keeps swapping elements until the container is sorted.
|
||
# Requirements: Needs to be able to compare elements with <=>, and the [] []= methods should
|
||
# be implemented for the container.
|
||
# Time Complexity: О(n^2)
|
||
# Space Complexity: О(n) total, O(1) auxiliary
|
||
# Stable: Yes
|
||
#
|
||
# [5, 4, 3, 1, 2].bubble_sort! => [1, 2, 3, 4, 5]
|
||
|
||
class Array
|
||
def swap(first, second)
|
||
self[first], self[second] = self[second], self[first]
|
||
self
|
||
end
|
||
|
||
def bubble_sort!
|
||
loop do
|
||
swapped = false
|
||
(self.size - 1).times do |index|
|
||
if self[index] > self[index + 1]
|
||
swap index, index + 1
|
||
swapped = true
|
||
end
|
||
end
|
||
break unless swapped
|
||
end
|
||
|
||
self
|
||
end
|
||
|
||
# def bubble_sort!
|
||
# length.times do |j|
|
||
# for i in 1...(length - j)
|
||
# swap i - 1, i if self[i - 1] < self[i]
|
||
# end
|
||
# end
|
||
#
|
||
# self
|
||
# end
|
||
#
|
||
# def bubble_sort!
|
||
# each_index do |index|
|
||
# (length - 1).downto( index ) do |i|
|
||
# swap i - 1, i if self[i - 1] < self[i]
|
||
# end
|
||
# end
|
||
#
|
||
# self
|
||
# end
|
||
end
|
||
|
||
|
||
|
||
|