Advertisement
oaktree

Quick Sort (In-Place) - Ruby

Mar 27th, 2016
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 0.66 KB | None | 0 0
  1. #! /usr/bin/env ruby
  2.  
  3. # str is array of chars
  4. # returns type like `str`
  5. def quicksort(str, _begin, _end)
  6.     return str[_begin..._end] if _end - _begin <= 1
  7.  
  8.     pivot = str[_end - 1] # choose last char as pivot
  9.     a = _begin
  10.     b = _end - 1
  11.  
  12.     while (b > a)
  13.         if str[b-1] > pivot
  14.             str[b] = str[b-1]
  15.             b-=1
  16.         else
  17.             str[b-1],str[a] = str[a],str[b-1]
  18.             a+=1
  19.         end
  20.     end
  21.  
  22.     str[b] = pivot
  23.  
  24.     str[ _begin...b ] = quicksort(str, _begin, b) if b - _begin > 1
  25.     str[ (b+1)..._end] = quicksort(str, b+1, _end) if _end - b > 1
  26.  
  27.     return str[_begin..._end]
  28.  
  29. end
  30.  
  31. puts "give me a string"
  32. str = gets.chomp.split('')
  33.  
  34. puts quicksort(str, 0, str.length).join('')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement