wdss的blog

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

class Array
   def quick_sort
      return self if self.length<=1
      k = self[0]
      head = 0
      tail = self.length - 1
      while head < tail
         (tail-head).times do
            if self[tail] < k
               self[tail], self[head] = self[head], self[tail]
               break
            end
            tail = tail - 1
         end
         (tail-head).times do
            if self[head] > k
               self[tail], self[head] = self[head], self[tail]
               break
            end
            head = head + 1
         end
      end
      [*(self.slice(0, head).quick_sort), self[head], *(self.slice(head+1, self.length-head-1).quick_sort)]
   end
end

#test
test_len = 20

random_array = []
test_len.times do
   random_array << rand(100)
end

puts "random_array            = [#{random_array.join(', ')}]"

puts "random_array.quick_sort = [#{random_array.quick_sort.join(', ')}]"
puts "random_array.sort       = [#{random_array.sort.join(', ')}]"
puts "quick_sort #{(random_array.quick_sort == random_array.sort) ? "succeed" : 'failed'}."

  

posted on 2015-01-06 11:29  wdss  阅读(394)  评论(0编辑  收藏  举报