Skip to content

Instantly share code, notes, and snippets.

@feixionglee
Last active June 15, 2020 15:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save feixionglee/62a31371c9e4804e88efe67624d9e9a4 to your computer and use it in GitHub Desktop.
Save feixionglee/62a31371c9e4804e88efe67624d9e9a4 to your computer and use it in GitHub Desktop.
Quick sort algorithm implement with Ruby
# frozen_string_literal: true
class QuickSort
def initialize(array)
@array = array
end
def sort
puts @array
quick_sort(0, @array.size - 1)
puts 'sorted:::::::::'
puts @array
end
private
def quick_sort(left, right)
return if left - right >= 0
pivot = partition(left, right)
quick_sort(left, pivot - 1)
quick_sort(pivot, right)
end
def partition(left, right)
left_ptr = left
right_ptr = right - 1
pivot = @array[right]
loop do
loop do
@array[left_ptr] < pivot ? left_ptr += 1 : break
end
loop do
@array[right_ptr] > pivot ? right_ptr -= 1 : break
end
if left_ptr < right_ptr
@array[left_ptr], @array[right_ptr] = @array[right_ptr], @array[left_ptr]
else
break
end
# puts "#{left_ptr}, #{right_ptr}"
end
@array[left_ptr], @array[right] = @array[right], @array[left_ptr]
left_ptr
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment